2

我有以下代码:

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我遇到的问题是,只要getRequestToken在 while 循环内,就永远不会调用完成处理程序。一旦我注释掉 while 循环,一切正常。

这里发生了什么,是否有可能阻止它?我计划使用 while 循环来防止在这个(和其他)完成处理程序完成他们的事情之前继续执行流程。

4

1 回答 1

5

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

您将需要人为地抽取 runloop 或使用后台线程。

看:

还有很多其他...

于 2013-01-19T16:34:26.617 回答