包含函数时未完成处理的完成处理程序在while循环中

时间:2013-01-19 16:24:12

标签: objective-c

我有以下代码:

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循环来防止执行流程在此(和其他)完成处理程序完成之前继续进行。

1 个答案:

答案 0 :(得分:5)

它不起作用的原因是因为NSURLConnection与runloop一起工作以执行异步请求。因此,如果您通过在while语句中暂停流程来停止运行循环,则阻止请求完成。

您需要人工抽取runloop或使用后台线程。

请参阅:

还有很多其他人......