NSURLSessionの後処理にラベル更新処理書いたらダメ
ちゃんと理解して使っていないからこうなるんですが
引っかかったのでメモ
を検討して色々やっていたら
ちゃんとコンソールのログで取得できているのに
画面表示には数十秒遅れて反映される現象が...
let url = NSURL(string: self.urlString + param)! let config = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: config) let task = session.dataTaskWithURL(url) { (data: NSData!, response: NSURLResponse!, error: NSError!) in // リソースの取得が終わると、ここに書いた処理が実行される var json:JSON = JSON(data: data) weatherMain = json["list"][0]["weather"][0]["main"].asString! self.lblDtlweather.text = weatherMain // ロードが完了したので、falseに self.isInLoad = false session.invalidateAndCancel() } task.resume() while isInLoad { usleep(10) }
ラベルのテキストを書き換える情報を
taskの処理から出してあげるとうまく更新される。
let url = NSURL(string: self.urlString + param)! let config = NSURLSessionConfiguration.defaultSessionConfiguration() let session = NSURLSession(configuration: config) let task = session.dataTaskWithURL(url) { (data: NSData!, response: NSURLResponse!, error: NSError!) in // リソースの取得が終わると、ここに書いた処理が実行される var json:JSON = JSON(data: data) weatherMain = json["list"][0]["weather"][0]["main"].asString! // ロードが完了したので、falseに self.isInLoad = false session.invalidateAndCancel() } task.resume() while isInLoad { usleep(10) } lblDtlweather.text = weatherMain
NSURLSessionの処理の中に
画面処理は書いちゃダメなんですね。
「self」指定が必須になるし。
非同期になるから何かしら競合しているのかな...