如何使用AFHTTPSessionManager取消下载?

时间:2014-10-04 13:18:04

标签: ios afnetworking-2

我的应用使用AFHTTPSessionManager和GET的子类下载信息。用户可以选择退出下载,我试图找出如何取消下载。

我遇到了这段代码:

- (void) cancel {
    [self.operationQueue cancelAllOperations];
}

但是,由于下载完成,这似乎不起作用。

然后我尝试了:

- (void) cancel {
    for (NSURLSessionTask *task in self.tasks) {
        [task cancel];
    }
}

这似乎打断了下载,但我不确定这是否是正确的方法。文档对此没有多大帮助(或者我还没有找到)。

那么,以上是取消我下载的正确方法吗?我需要做更多的清理工作吗?

1 个答案:

答案 0 :(得分:4)

您当然不想使用cancelAllOperations。对于基于操作的AFHTTPRequestOperationManager请求,这是好的,但不是基于任务的AFHTTPSessionManager请求。遗憾的是,AFHTTPSessionManager不使用操作。我理解为什么(由于NSURLSessionTask代表在会话级别(!)指定,它与后台会话不兼容等等,因此将操作中的任务包装起来非常复杂,但它&#39太糟糕了,因为它显着降低了AFHTTPSessionManager的价值,恕我直言。马特曾经说过他going to remedy this,但它从来没有被释放过。

取消个别任务的第二种方法很好。您也可以拨打invalidateSessionCancelingTasks,但是当您想要发起更多请求时,您可能需要重新实例化会话(或整个AFHTTPSessionManager)。