取消使用sendAsynchronousRequest:queue:completionHandler启动的NSURLConnection?

12
1. 使用 sendAsynchronousRequest:queue:completionHandler: 启动的 NSURLConnection 可以取消吗? 2. 为什么 sendAsynchronousRequest:queue:completionHandler: 不返回它创建的 NSURLConnection 对象,以便我可以取消它?
1个回答

5

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

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

旧回答:

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

NSOperationQueue *downloadOperationQueue;

要下载一个文件,请调用类似以下的代码:
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");
                       }];

要在以后取消下载,请调用:

[downloadOperationQueue cancelAllOperations];

14
根据文档所述:“...queue: The operation queue to which the handler block is dispatched when the request completes or failed”。“queue”参数即为处理完成块的队列,而不是处理请求本身的队列。 - Thomas
WTF?它不会取消请求:D - l0gg3r
是的。这就是为什么我编辑了答案并提供了另一个答案链接的原因。 - thgc
是的,旧答案只是将isCancelled设置为Yes,您需要手动检查并相应地处理 :/ - Skodik.o

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接