2014-10-04 38 views
1

我的应用程序使用AFHTTPSessionManager和GET的子类下载信息。用户可能会选择退出下载,我正试图弄清楚如何取消下载。如何用AFHTTPSessionManager取消下载?

我碰到这样的代码:

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

但是,这似乎并没有工作,因为下载完成。

我然后设法:

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

这似乎中断下载,但我不知道这是否是这样做的正确方法。文档对此没有太大的帮助(或者我还没有找到它)。

那么,上述正确的方法来取消我的下载?我需要做更多清理吗?

回答

4

你肯定不想用cancelAllOperations。这与基于操作的AFHTTPRequestOperationManager请求无关,但不是基于任务的AFHTTPSessionManager请求。可悲的是,AFHTTPSessionManager不使用操作。我明白为什么(考虑到NSURLSessionTask代表在会话级别(!)指定,与后台会话不兼容等原因,将操作中的任务封装起来非常复杂),但这太糟糕了,因为它显着降低了AFHTTPSessionManager,恕我直言。马特曾经说过他是going to remedy this,但它从未被释放。

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