有人可以解释我如何取消并重试NKAssetDownload吗?
目前我试过这个:
NKAssetDownload * download = [issue.downloadingAssets objectAtIndex:0];
currentConnection = [download downloadWithDelegate:self];
要取消下载,请执行以下操作:
[currentConnection cancel];
这样可行,但NKAssetDownload保留在NKIssue的downloadAssets表中。 下次我想下载相同的问题时,我再次执行相同的代码(downloadWithDelegate)。然而,这没有任何作用。就好像NKAssetDownload实例仍然使用我之前取消的相同的NSURLConnection,因此它不会启动下载。真正的问题是我无法从NKIssue中删除NKAssetDownload,因此无法创建指向同一URL的新URL以重试下载。 据我所知,除了从库中删除NKIssue(扔掉所有东西)并重新创建它之外,没有办法取消下载并稍后重试。 有谁知道怎么做?
有一个关于S.O.的相关问题。 Is it possible to cancel an NKAssetDownload?但是唯一提供的解决方案是删除NKIssue,这不是我想要做的。
答案 0 :(得分:0)
报亭下载队列由Newsstand框架维护。开发人员无法控制暂停/取消下载(除了从NKLibrary删除NKIssue)。
您可以实现NSURLConnectionDelegate的以下方法来重试任何失败的下载。
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
我检查过如果下载失败并且这个名为nkIssue.downloadingAssets.count的方法始终为0.您可以再次添加问题的资产并开始下载。
如果你想暂停NS下载,恐怕没办法了。如果你想取消下载的唯一方法是删除NKIssue fron NKLibrary,我觉得这没有问题。您可以随时再次添加NKIssue,并在以后随时开始下载。
答案 1 :(得分: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];
}