1

我有一个 NewsStand 应用程序,当用户点击下载按钮时,我们使用下载问题

[nkAssetDownload downloadWithDelegate:self];

现在在下载之间假设网络断开,NSURLConnection 调用 didFailWithError:(NSError *)error 方法。我通过警报通知用户并更新 UI,以便启用下载按钮。现在,当用户点击“下载”按钮时,我会检查

if(nkIssue.downloadingAssets.count == 1) { 再次开始下载 [nkIssue.downloadingAssets objectAtIndex:0]; } else { 使用 nkAssetDownload = [nkIssue addAssetWithRequest:urlRequest] 开始下载;}

我对此有一些疑问

1) 为什么当用户再次点击“下载”按钮时我总是得到 nkIssue.downloadingAssets.count == 0?它不应该是 1 仍然应该在 iOS 的下载队列中的问题吗?

2)用户再次点击“下载”后,问题应该继续从同一位置下载吗?我并不总是观察到这种行为,有时它会从开始下载(叹气)。

尽管如果我关闭应用程序,将其从内存中删除(双击主页按钮,长按应用程序图标并删除它)并再次启动,我确实在“didFinishLaunchingWithOptions”中得到 [nkLib downloadAssets].count == 1 并且我的问题继续下载。

Apple 并未明确记录 NewsStand 的各个方面。

4

1 回答 1

1

如果您想进一步调查并且没有更好的想法,我有两个理论:

  1. 我很惊讶 NSURLConnection 调用 didFailWithError。我原以为下载资产会留在 downloadAssets 中,稍后会自动重试。我对此的理论是: didFailWithError 方法是可选的,Newsstand Kit 的行为会有所不同,具体取决于您是否实现此方法。NSURLConnection 可能会检查委托是否响应了做出此决定的方法。如果实现该方法,出现网络错误,使用 didFailWithError 方法报错。在该方法完成执行后,下载的资源将从库中删除。如果您不实施该方法,下载不会失败,任何错误都将由 Newsstand Kit 处理:

  2. 如果下载失败(或完成),您会收到 didFailWithError(或 connectionDidFinishDownloading)委托回调方法的通知。在该方法完成之前,下载资产可能不会从 downloadAssets 中删除。如果您在该方法期间显示警报,则当用户再次按下“下载”按钮时,资产将不存在。

于 2012-03-21T11:06:21.650 回答