具有无效恢复数据的NSURLSession

时间:2015-02-06 07:35:35

标签: ios download nsurlsession resume nsurlsessiondownloadtask

我使用[NSURLSessionConfiguration defaultSessionConfiguration]来配置我的网址会话。

我通过调用cancelByProducingResumeData:来暂停任务以生成恢复数据,并将其保存到磁盘。当我想重新启动任务时,我会调用downloadTaskWithResumeData:。它很有效,直到我重新启动应用程序。

我暂停任务后杀了应用程序。然后我再次启动我的应用程序,并致电downloadTaskWithResumeData,我发现简历数据无效。

我将简历数据解析为NSDictionary并获取NSURLSessionResumeInfoLocalPath,即

"/private/var/mobile/Containers/Data/Application/5DD071C3-9D5E-4D76-9F74-57B6C92445CB/tmp/CFNetworkDownload_IUI6kg.tmp"。我尝试访问此文件,但它不存在。

我的问题是,在重新启动应用后,如何使用简历数据继续下载任务。

感谢。

2 个答案:

答案 0 :(得分:1)

任何时候你重新启动你的应用程序,tmp下的所有东西都会被清理,我遇到了同样的事情,即使我试图复制所有* .tmp,并在应用程序重新启动时粘贴,它会抛出一个错误

我的建议是,检查* .tmp文件是否可访问,如果不是,则从开始重新下载

答案 1 :(得分:1)

我遇到了这个问题。我发现在iOS8中重启应用程序后,沙箱路径会发生变化。但resumeData记录了旧的沙箱路径,即让下载任务找不到resumeData。因此,我通过键“ NSURLSessionResumeInfoLocalPath ”更新沙箱中记录的沙箱路径,它确实有效:

NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:resumeDataPath];
NSString *resumeDataFileName = [dic[@"NSURLSessionResumeInfoLocalPath"] lastPathComponent];
NSString *newTempPath = NSTemporaryDirectory();
NSString *newResumeDataPath = [newTempPath stringByAppendingPathComponent:resumeDataFileName];
[dic setValue:newResumeDataPath forKey:@"NSURLSessionResumeInfoLocalPath"];
[dic writeToFile:resumeDataPath atomically:YES];