HTTP
のHTTP
フォーマットで電子メールとパスワードを送信するサブミットボタンがありますが、アプリケーションがサーバーからの応答を受信してもインジケータビューは停止しません。iOS Swift 3 - サブミット後にUIActivityIndicatorViewを停止できません
@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()
}
}
}
私はボタン「を提出する」をクリックすると、私はボタンの上のインジケータービューを参照してください、それは停止し、消えません。
コードに問題はありますか?
私はSwift 3
とXcode 8
を使用しています。
ありがとうございました。
ありがとうございました。それは動作します..なぜ私は内部非同期ブロックを呼び出す必要がありますか? – user826323
Cuz UIとやり取りするすべてのものは、メインスレッド上で実行する必要があります。 –
@ user826323あなたは私の答えを受け入れることができますか? –