带有NSOperation的asynchronousNSURLConnection

我想在后台模式下做NSURLConnection ,因为它的响应是有很多数据的didEnterBackground告诉使用Apple的有限长度编码在didEnterBackground使用。 但我想避免它。取而代之,我使用下面的代码通过与NSInvocation NSOperation作为,但它不工作。 connectToServerNSURLConnection operation.any帮助吗? didReceiveDatadidReceiveResponse委托方法不被调用?

  NSOperationQueue *queue = [NSOperationQueue new]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(connectToServer) object:nil]; [queue addOperation:operation]; [operation release]; [queue autorelease]; -(void)connectToServer { NSURL *url = [NSURL URLWithString:@"http://www.google.com"]; NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:url]; NSURLConnection *theConnection = [[[NSURLConnection alloc] initWithRequest:theRequest delegate:self] autorelease]; if( theConnection ) { webData = [[NSMutableData data] retain]; } else { NSLog(@"theConnection is NULL"); } } 

这样的问题被问及了十亿次。 代表不会被调用,因为iOS 4操作在辅助线程上启动。 线程可能会在代表被调用之前退出。

保持主线程上的连接,并使用GCD在后台线程中处理数据。

我在这里写了所有这些东西: http : //cocoaintheshell.com/2011/04/nsurlconnection-synchronous-asynchronous/

编辑:更新的链接。

苹果公司提供了QHTTPOperation ,它只是做你想要的,在一个NSOperation封装一个NSURLConnection ,用于一个请求。 你可以在Apple的示例代码中find它。

QHTTPOperation实际上是QHTTPOperation的一个子类,它允许您在QRunLoopOperation中封装依赖于运行循环callback的逻辑。

第三方ASIHTTPRequest是一个类似的stream行解决scheme,AFAIK它不再维护。

查看苹果文档中logging的sendAsynchronousRequest:queue:completionHandler:方法。 它允许NSURLConnection的asynchronous请求。

注意这需要iOS5或更高版本