![](/img/trans.png)
[英]How to delay method until NSData finishes loading in NSUrlSession?
[英]Method Delay In NSURLSession Block
當我調用此塊時:
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:url
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
_data = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
_label.text = [NSString stringWithFormat:@"%@°",([[[self.data objectForKey:@"main"] objectForKey:@"temp"] floatValue]) - 273.15)];
NSLog(@"%@",self.data);
}] resume];
即使調用了NSLog,該塊內的代碼也需要花費很長時間才能執行-發生了什么? 我嘗試了各種解決方案,但沒有任何效果。
始終在主線程上執行與UI更新相關的任務,否則執行UI會花費一些時間。
喜歡,
所以使用下面的代碼
dispatch_async(dispatch_get_main_queue(), ^{
_label.text = [NSString stringWithFormat:@"%@°",([[[self.data objectForKey:@"main"] objectForKey:@"temp"] floatValue]) - 273.15)];
}
請嘗試以下代碼:
dispatch_async(dispatch_get_main_queue(), ^{
_label.text = [NSString stringWithFormat:@"%@°",([[[self.data objectForKey:@"main"] objectForKey:@"temp"] floatValue]) - 273.15)];
}
設置標簽時。
原因:
您可能不在主線程上,並且永遠不要從其他線程更新UI。 如今,當您執行此操作時,iOS不再崩潰,但仍然落后。
在iOS中,所有UI更改都將在主線程上進行,如果您嘗試在一個塊(在后台線程上執行)中對UI進行任何更改,則會滯后。 您可以使用dispatch_async(dispatch_get_main_queue(), ^{});
在塊中執行UI更改。
希望這會幫助你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.