取消NSURLConnection以sendAsynchronousRequest开头:queue:completionHandler:?

ma1*_*w28 12 nsurlconnection nsurlconnectiondelegate sendasynchronousrequest

  1. 是否有可能取消NSURLConnection开始sendAsynchronousRequest:queue:completionHandler:

  2. 为什么不sendAsynchronousRequest:queue:completionHandler:返回NSURLConnection它创建的对象以便我可以取消它?

thg*_*hgc 5

编辑 - 由于我提供的答案似乎有误,您应该查看以下相关问题及其答案:

如何通过NSURLConnection sendAsynchronousRequest取消异步调用?

老答案:

在您的类的标题(例如ViewController)中,声明一个操作队列:

NSOperationQueue *downloadOperationQueue;
Run Code Online (Sandbox Code Playgroud)

要下载类似以下内容的文件:

downloadOperationQueue = [[NSOperationQueue alloc] init];
NSURLRequest *fileRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/images/nav_logo114.png"]
                                             cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                         timeoutInterval:10];
[NSURLConnection sendAsynchronousRequest:fileRequest
                                   queue:downloadOperationQueue
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
                           NSLog(@"download successful");
                       }];
Run Code Online (Sandbox Code Playgroud)

要在以后取消下载电话:

[downloadOperationQueue cancelAllOperations];
Run Code Online (Sandbox Code Playgroud)

  • 根据[doc](http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html):"... queue:操作队列当请求完成或失败时调度处理程序块".ie:队列参数是处理完成块的队列,而不是处理请求本身的队列 (14认同)