2012-08-09 73 views
3

任何人都可以解釋我如何取消並重試NKAssetDownload?取消NKAssetDownload工作,redownloading不。任何解決方案

目前我嘗試這樣做:

NKAssetDownload * download = [issue.downloadingAssets objectAtIndex:0]; 
currentConnection = [download downloadWithDelegate:self]; 

要取消我做下載:

[currentConnection cancel]; 

這工作,但是NKAssetDownload停留在NKIssue downloadingAssets表。 下一次我想下載同樣的問題,我再次執行相同的代碼(downloadWithDelegate)。然而這並沒有任何作用。就好像NKAssetDownload實例仍然使用我之前取消的NSURLConnection,因此它不會啓動下載。真正的問題是我無法從NKIssue中刪除NKAssetDownload,因此無法創建一個指向相同URL的新的重試下載。 據我所知,沒有辦法取消下載並稍後重試它,除了從庫中刪除NKIssue(它拋棄所有內容)並重新創建它。 有誰知道如何做到這一點?

S.O.有一個相關的問題。 Is it possible to cancel an NKAssetDownload?,但唯一提供的解決方案是刪除NKIssue,這不是我想要做的。

+0

我有貼[此](http://stackoverflow.com/questions/9615945/what-happened-after-nkissue-download-terminated-due-to-network-unavailability)問題。 – msk 2012-08-09 19:07:09

回答

0

報亭下載隊列由Newsstand框架維護。開發人員無法控制/取消下載(除非從NKLibrary中刪除NKIssue)。

你可以實現下面的NSURLConnectionDelegate方法來重試任何失敗的下載。

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 

我檢查,如果下載失敗,該方法被稱爲nkIssue.downloadingAssets.count始終爲0,您可以重新添加您的問題的資產,可以開始下載。

如果你想暫停NS下載,恐怕沒有辦法。如果你想取消下載的唯一方法就是刪除NKIssue fron NKLibrary,我認爲這沒有問題。您隨時可以再次添加NKIssue並在以後隨時開始下載。

+0

「你可以用didFailWithError」是什麼意思?我如何使用它?我只是希望用戶能夠取消下載。 – 2012-08-10 08:52:11

+0

更新了我的答案。 – msk 2012-08-10 10:17:54

0

我認爲更好地「重置」這個問題。因爲在取消NSURLConnection時問題狀態不更新,並且永遠保持「下載」狀態。而且你也不需要指向NSURLConnection的指針。

注意:這將刪除與此問題相關的任何已完成的下載。

-(NKIssue*) resetIssue:(NKIssue*)issue{ 
    NSString* issueName = [issue name]; 
    NSDate* issueDate = [issue date]; 
    NKLibrary * lib = [NKLibrary sharedLibrary]; 
    [lib removeIssue:issue]; 
    return [lib addIssueWithName:issueName date:issueDate]; 
} 
相關問題