URLSessionがリクエストを送信し、応答を取得する前にiOSアプリがバックグラウンドモードになると、self.myLabel.text
は更新を取得しますか?、DispatchQueue.mainは機能しますか?あなたはこのように行うことができますiOSアプリがバックグラウンドモードの場合、DispatchQueue.main?
func updateUILabel(callback :(NSDictionary?) -> Void){
// create post request
let url = URL(string: "https:anyserver.xyz”)!
var request = URLRequest(url: url)
request.httpMethod = "POST"
let task = URLSession.shared.dataTask(with: request) { data, response, error in
DispatchQueue.main.async({
guard let data = data, error == nil else {
print(error?.localizedDescription ?? "No data")
}
let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
if let responseJSON = responseJSON as? [String: Any] {
self.myLabel.text = responseJSON[“text”] as! String
}
})
}
task.resume()
}
「DispatchQueue.main.async」は、URLSessionを呼び出した後すぐにバックグラウンドモードに入ると機能しますか?アプリがバックグラウンドモードになっている場合のメインスレッドの動作は何ですか? –
はい私はコードを一度やりましたが、ベスト・プラクティスとして、アプリがバックグラウンドになるとUIを更新するのではなく、アプリがバックグラウンドにある間にそれらのデータを収集することができます。アプリがフォアグラウンドになると、また、アプリケーションがバックグラウンドにある間に応答文字列をNSUserDefaultに保存することもできます。アプリがフォアグラウンドになると、そのユーザーのラベルからラベルを更新することができます。ここでは、turoriaが役立ちます。https://www.raywenderlich.com/143128/バックグラウンドモード - チュートリアルを開始する –