带有NSOperation的asynchronousNSURLConnection
我想在后台模式下做NSURLConnection
,因为它的响应是有很多数据的didEnterBackground
告诉使用Apple的有限长度编码在didEnterBackground
使用。 但我想避免它。取而代之,我使用下面的代码通过与NSInvocation
NSOperation
作为,但它不工作。 connectToServer
有NSURLConnection
operation.any帮助吗? didReceiveData
, didReceiveResponse
委托方法不被调用?
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或更高版本