iOS Swift 3-Can';提交后不要停止UIActivityIndicator视图

iOS Swift 3-Can';提交后不要停止UIActivityIndicator视图,ios,cocoa-touch,swift3,grand-central-dispatch,Ios,Cocoa Touch,Swift3,Grand Central Dispatch,我有一个提交按钮,可以通过HTTP以JSON格式提交电子邮件和密码进行验证,但即使应用程序收到服务器的响应,指示器视图也不会停止 @IBAction func signInButtonAction(_ sender: UIButton) { let validated = validateEmailAddressTextField() if validated { let emailAddress = emailAddressTextField.text

我有一个提交按钮,可以通过
HTTP
JSON
格式提交电子邮件和密码进行验证,但即使应用程序收到服务器的响应,指示器视图也不会停止

    @IBAction func signInButtonAction(_ sender: UIButton) {
    let validated = validateEmailAddressTextField()
    if validated {
        let emailAddress = emailAddressTextField.text
        let password = passwordField.text

        let url:URL = URL(string: "http://localhost:8080/app/user/signin")!
        let session = URLSession.shared

        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.allHTTPHeaderFields = ["Content-Type": "application/json"]
        request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData

        let user = User(emailAddress: emailAddress!, password: password!)
        let requestJSON = careGiver.toJSON()

        request.httpBody = requestJSON?.data(using: String.Encoding.utf8)
        let indicator = UIActivityIndicatorView(activityIndicatorStyle: .gray)
        indicator.center = view.center
        view.addSubview(indicator)
        indicator.startAnimating()

        DispatchQueue.main.asyncAfter(deadline: .now() + 0.0) {
            let task = session.dataTask(with: request as URLRequest) {
                (
                data, response, error) in

                guard let data = data, let _:URLResponse = response, error == nil else {
                    print("error")
                    return
                }
                let dataString =  String(data: data, encoding: String.Encoding.utf8)
                print(dataString)
                indicator.stopAnimating()
            }
            task.resume()
        }
    }
}
当我单击“提交”按钮时,我看到按钮顶部有一个指示器视图,但它不会停止并消失

代码有什么问题吗

我使用的是
swift3
Xcode 8


谢谢。

指示器。停止设置动画()

尝试在主线程上运行这行代码:

DispatchQueue.main.async {
    indicator.stopAnimating()
}
DispatchQueue.main.async {
    indicator.stopAnimating()
}

在随机线程上调用网络闭包,但UI代码只能在主线程中处理。因此,您只需在主线程中调用indicator.stopAnimating():

DispatchQueue.main.async {
    indicator.stopAnimating()
}
DispatchQueue.main.async {
    indicator.stopAnimating()
}

此外,我还将此块移到闭包的开始(在保护之前),以防止在响应出错时动画继续。

谢谢。它起作用了。。为什么我需要在异步块内部调用?因为与UI交互的所有东西都必须在主线程上运行。