取消NKAssetDownload工作,重新下载没有。有解决方案吗

时间:2012-08-09 18:12:07

标签: ios newsstand-kit

有人可以解释我如何取消并重试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,这不是我想要做的。

2 个答案:

答案 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];
}