作者larry122 (larry122)
看板MacDev
標題[問題] Block 與 NSURLSESSION 的疑問
時間Sun Jul 9 01:26:47 2017
目前想寫類似這樣的功能
[self callAPIWithCompletionHandler:^(NSString *strResponse) {
我以為會在這邊執行下方NSLUELSESSION完才繼續往下,所以在這邊寫了
if(xxx=xxx){
[self.navigation push xxx];
}
else{
self.navigation push.....
}
}
-(void)callAPIWithCompletionHandler : (void (^) (NSString * strResponse))
completionHandler
{
NSURLSessionTask *task = [session uploadTaskWithRequest:request
fromData:body completionHandler:^(NSData * _Nullable data, NSURLResponse *
_Nullable response, NSError * _Nullable error) {
// 這邊掠過
}];
[task resume];
}
但她都會先跑完 if(xxx=xxx){
[self.navigation push xxx];
}
else{
self.navigation push.....
}
之後等讀取完成後再跑一次,導致我同一頁推出去不止一次..
按上方返回後可以看到大概跑了2.3頁,請問是否我理解錯誤,在block內會先跑到底
等回傳後又再跑一次,還是我哪裡寫法有問題呢!?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.42.76.64
※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1499534810.A.E0D.html
→ benjenq: 你的completionHandler(@"xx") 可能擺在[task resume]前 07/09 02:23
推 ppppman: 你的api在哪回應完成的?樓上寫很清楚囉 07/09 02:27
推 cryinglove: nsurlsession的block不是馬上執行的,是要等到網路行 07/09 09:50
→ cryinglove: 為資料回來才會執行 07/09 09:50
→ larry122: 我的需要等NSURLSESSION 回傳才去做 if else 的判斷 07/09 10:14
→ larry122: 我該怎做才能讓他等待NSURLSESSION執行完成後才往下做呢 07/09 10:16
→ Esvent: 在task的block裡面呼叫你自己的block即可 07/09 10:18
→ larry122: 好像懂了 ! 我好像搞反了 07/09 11:04
→ larry122: 那假如我是要 NSString *xxx=[self.completionHandler]; 07/09 11:25
→ larry122: if(xxx isqqualtostring ooo) 07/09 11:26
→ larry122: 我應該把if 移動到completionHandler 內這邊? 07/09 11:26
→ larry122: 我好像又混亂了 ORZ 我想一下 07/09 11:27
→ yuanruo: 外層block callback 移到session 完成後回調出去 07/09 16:21