我有一个NewsStand应用程序,当用户点击下载按钮时,我们使用
下载问题[nkAssetDownload downloadWithDelegate:self];
现在在下载假设网络断开连接之间,NSURLConnection调用didFailWithError:(NSError *)错误方法。我通过警报和更新UI通知用户,以便启用下载按钮。现在,当用户点击“下载”按钮时,我会检查
if(nkIssue.downloadingAssets.count == 1){再次开始下载 [nkIssue.downloadingAssets objectAtIndex:0]; } else {start 下载nkAssetDownload = [nkIssue addAssetWithRequest:的URLRequest]; }
我对此有一些疑问
1)当用户再次点击“下载”按钮时,为什么我总是得到nkIssue.downloadingAssets.count == 0?如果它不是1应该仍然在iOS的下载队列中的问题吗?
2)用户再次点击“下载”后,问题应继续从同一位置下载吗?我并不总是观察这种行为,有时它从开始(叹息)开始下载。
虽然如果我关闭应用程序,将其从内存中删除(双击主页按钮,长按应用程序图标并删除它)然后再次启动我在“didFinishLaunchingWithOptions”中获取[nkLib downloadsAssets] .count == 1并且我的问题恢复下载。
Apple没有明确记录NewsStand内容的每个方面。
答案 0 :(得分:1)
如果你想进一步调查并且没有更好的想法,我有两个理论:
我很惊讶NSURLConnection调用didFailWithError。我原以为下载资产会保留在downloadAssets中,并在以后自动重试。我的理论是: didFailWithError方法是可选的,Newsstand Kit的行为会有所不同,具体取决于您是否实现此方法。 NSURLConnection可能会检查委托是否响应方法来做出此决定。如果实现该方法并且存在网络错误,则使用didFailWithError方法报告错误。该方法执行完毕后,将从库中删除下载资产。如果您没有实施该方法,下载将不会失败,并且报亭套件将处理任何错误:下载资产将保留在队列中并将无限期地重试(就您的软件而言,下载永远不会失败) )。
如果下载失败(或完成),则会通过didFailWithError(或connectionDidFinishDownloading)委托回调方法通知您。在该方法完成之前,可能不会从downloadAssets中删除下载资产。如果您在方法期间提出警报,则当用户再次按下“下载”按钮时,资产将不在那里。