我的应用使用AFHTTPSessionManager
和GET的子类下载信息。用户可以选择退出下载,我试图找出如何取消下载。
我遇到了这段代码:
- (void) cancel {
[self.operationQueue cancelAllOperations];
}
但是,由于下载完成,这似乎不起作用。
然后我尝试了:
- (void) cancel {
for (NSURLSessionTask *task in self.tasks) {
[task cancel];
}
}
这似乎打断了下载,但我不确定这是否是正确的方法。文档对此没有多大帮助(或者我还没有找到)。
那么,以上是取消我下载的正确方法吗?我需要做更多的清理工作吗?
答案 0 :(得分:4)
您当然不想使用cancelAllOperations
。对于基于操作的AFHTTPRequestOperationManager
请求,这是好的,但不是基于任务的AFHTTPSessionManager
请求。遗憾的是,AFHTTPSessionManager
不使用操作。我理解为什么(由于NSURLSessionTask
代表在会话级别(!)指定,它与后台会话不兼容等等,因此将操作中的任务包装起来非常复杂,但它&#39太糟糕了,因为它显着降低了AFHTTPSessionManager
的价值,恕我直言。马特曾经说过他going to remedy this,但它从来没有被释放过。
取消个别任务的第二种方法很好。您也可以拨打invalidateSessionCancelingTasks
,但是当您想要发起更多请求时,您可能需要重新实例化会话(或整个AFHTTPSessionManager
)。