我有以下代码:
while ( /* Some condition that will not be met in this example */ ) {
if( shouldSendRequest ) {
[launchpad getRequestToken];
}
else {
// Next step
}
}
- (void)getRequestToken {
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
[self requestForRequestTokenDidComplete:data withResponse:response withError:error];
}];
}
-(void)requestForRequestTokenDidComplete:(NSData *)data
withResponse:(NSURLResponse *)response withError:(NSError *)error {
// Deal with the returned token
}
我遇到的问题是只要getRequestToken
在while循环中,就永远不会调用getRequestToken
中的完成处理程序。一旦我注释掉while循环,一切正常。
这里发生了什么,是否有可能阻止它?我已经计划使用while循环来防止执行流程在此(和其他)完成处理程序完成之前继续进行。
答案 0 :(得分:5)
它不起作用的原因是因为NSURLConnection
与runloop一起工作以执行异步请求。因此,如果您通过在while
语句中暂停流程来停止运行循环,则阻止请求完成。
您需要人工抽取runloop或使用后台线程。
请参阅:
还有很多其他人......