AFHTTPRequestOperation 取消请求

Posted

技术标签:

【中文标题】AFHTTPRequestOperation 取消请求【英文标题】:AFHTTPRequestOperation Cancel Request 【发布时间】:2013-12-17 15:49:28 【问题描述】:

有没有办法取消 AFHTTPRequestOperation?例如,我正在使用它来下载 PLIST。所以我打算有一个按钮来取消下载或任务。 有什么办法吗?

更新:

operationQueue = [NSOperationQueue new];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:myURL] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.responseSerializer = [AFPropertyListResponseSerializer serializer];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id propertyList) 

    NSLog(@"DONE");        

 failure:^(AFHTTPRequestOperation *operation, NSError *error) 

    NSLog(@"%@", error);


 ];

 [operationQueue addOperation:operation];

所以我已将“操作”放入“操作队列”,并且可以通过以下方式停止操作:

[operationQueue cancelAllOperations];

这只是队列中的一项操作。如果有多个,有没有办法显式停止操作?我猜控制台中出现以下错误 - 如果队列被取消是否正常?

Error Domain=NSURLErrorDomain Code=-999 "操作无法完成。

【问题讨论】:

【参考方案1】:

你可以使用:

[operation cancel];

这是一个由 AFNetworking 实现的 NSOperation 方法。

【讨论】:

我如何从另一个(void)调用它,因为操作只在调用连接的这个函数中知道。 您有几个选择。例如,您可以将operation 保存为弱@property,或者您可以将其添加到NSOperationQueue 而不是对其调用start,然后稍后从同一个队列中找到它。这是 NSOperation 的一个很好的概述:nshipster.com/nsoperation 感谢 NSOperation 的提示。已经更新了我上面的代码。我认为如果取消操作,控制台日志中的错误是正常的吗? 是的,错误 -999 是预期行为。如果您最终有多个操作,您可以查看operationQueue.operations 数组,然后搜索您想要的那个。例如,您可以查看 operation.request.URL.path 以查看它是否包含您要取消的 URL。 @Ruddy 不要记录错误如果error.code == kCFURLErrorCancelled && [error.domain isEqualToString:NSURLErrorDomain]【参考方案2】:

您可以使用它来取消所有操作:

[[httpClient operationQueue] cancelAllOperations];

【讨论】:

httpClient到底是什么?对我来说,这是一个未声明的标识符。谢谢 httpClient 是您用于创建连接的AFHTTPClient 的实例。无论如何,我刚刚意识到亚伦的答案更适合你的情况。

以上是关于AFHTTPRequestOperation 取消请求的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 取消发布请求

AFNetworking 识别失败原因:用户取消请求或网络故障

未知接收者'AFHTTPRequestOperation';你的意思是'AFHTTPRequestSerializer'

Swift错误无法转换类型'(AFHTTPRequestOperation?,AnyObject?)->()的值

AFHTTPRequestOperation setCacheResponseBlock 无法转换类型的值

AFNetworking + AFHTTPRequestOperation 无法保存数组