我尝试在NSThread和dispatch_queue中使用NSURLConnection。不会调用已实现的NSURLConnectionDelegate方法。但是当我在NSThread和NSOperationQueue中使用NSOperation时,会调用这些方法。
答案 0 :(得分:3)
未调用NSURLConnectionDelegate
方法,因为您的线程或调度块在调用委托方法之前完成执行。如果你想以这种方式在自己的线程中使用NSURLConnection
,正如其他人建议你必须保持运行循环。
Here就是一个例子。基本上
while(!finished) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection
{
finished = TRUE;
}
以上所述,在异步块内部使用NSURLConnection
同步API会不会更好?例如,您可以将同步请求包装在NSOperation
答案 1 :(得分:0)
您可以使用基于块的方法:
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if ([data length] > 0 && error == nil){
// we should check that data is OK
NSLog(@"Data received");
}
}