作者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://webptt.com/cn.aspx?n=bbs/MacDev/M.1499534810.A.E0D.html
2F:→ benjenq: 你的completionHandler(@"xx") 可能摆在[task resume]前 07/09 02:23
3F:推 ppppman: 你的api在哪回应完成的?楼上写很清楚罗 07/09 02:27
4F:推 cryinglove: nsurlsession的block不是马上执行的,是要等到网路行 07/09 09:50
5F:→ cryinglove: 为资料回来才会执行 07/09 09:50
6F:→ larry122: 我的需要等NSURLSESSION 回传才去做 if else 的判断 07/09 10:14
7F:→ larry122: 我该怎做才能让他等待NSURLSESSION执行完成後才往下做呢 07/09 10:16
8F:→ Esvent: 在task的block里面呼叫你自己的block即可 07/09 10:18
9F:→ larry122: 好像懂了 ! 我好像搞反了 07/09 11:04
10F:→ larry122: 那假如我是要 NSString *xxx=[self.completionHandler]; 07/09 11:25
11F:→ larry122: if(xxx isqqualtostring ooo) 07/09 11:26
12F:→ larry122: 我应该把if 移动到completionHandler 内这边? 07/09 11:26
13F:→ larry122: 我好像又混乱了 ORZ 我想一下 07/09 11:27
14F:→ yuanruo: 外层block callback 移到session 完成後回调出去 07/09 16:21