3

谁能解释我如何取消并重试 NKAssetDownload?

目前我试过这个:

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

要取消下载,我会这样做:

 [currentConnection cancel];

这可行,但是 NKAssetDownload 保留在 NKIssue 下载资产表中。下次我想下载相同的问题时,我再次执行相同的代码( downloadWithDelegate )。然而,这并没有做任何事情。就好像 NKAssetDownload 实例仍然使用我之前取消的相同 NSURLConnection ,因此它不会启动下载。真正的问题是我无法从 NKIssue 中删除 NKAssetDownload,因此无法创建一个指向同一 URL 的新 URL 以重试下载。据我所知,除了从库中删除 NKIssue (这会丢弃所有内容)并重新创建之外,没有办法取消下载并稍后重试。有谁知道如何做到这一点?

关于 SO Is it possible to cancel an NKAssetDownload 有一个相关的问题吗? 但提供的唯一解决方案是删除 NKIssue,这不是我想要做的。

4

2 回答 2

0

Newsstand 下载队列由 Newsstand 框架维护。开发人员无法控制暂停/取消下载(除了从 NKLibrary 中删除 NKIssue)。

您可以实现以下 NSURLConnectionDelegate 方法来重试任何失败的下载。

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

我检查了如果下载失败并且这个名为 nkIssue.downloadingAssets.count 的方法始终为 0。您可以再次添加问题的资产并开始下载。

如果要暂停NS下载,恐怕没有办法。如果你想取消下载,唯一的方法是从NKLibrary中删除NKIssue,我认为这没有问题。您可以随时再次添加 NKIssue 并随时开始下载。

于 2012-08-09T19:07:12.430 回答
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];
}
于 2014-02-26T17:54:18.013 回答