2014-10-04 41 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)。