NSURLSession downloadTaskWithResumeData 在重新启动应用程序后给出错误

Posted

技术标签:

【中文标题】NSURLSession downloadTaskWithResumeData 在重新启动应用程序后给出错误【英文标题】:NSURLSession downloadTaskWithResumeData giving error after relaunch app 【发布时间】:2015-05-19 14:51:52 【问题描述】:

我创建了一个下载任务。我已经使用cancelByProducingResumeData 取消了我的应用程序中的任务并保存到磁盘。当用户重新启动应用程序并单击恢复按钮时,我再次通过self.downloadTask = [session downloadTaskWithResumeData:resumableData]; 启动了下载任务。但这会产生错误。

Invalid resume data for background download. Background downloads must use http or https and must download to an accessible file

编辑:我已验证模拟器上的tmp 目录包含下载数据,但无法访问。

【问题讨论】:

听起来正是像这种情况:***.com/questions/28360750/… @Petesh 是的,我已经看到了,但这不是解决方案。 我已经验证tmp包含重启后的数据。 正是@Petesh,它会清除所有缓存的数据,但在执行任何操作之前,您可以检查数据是否存在recommended by Apple。详情请参考*** Post。 但是每次重新启动时它都会损坏,我检查了路径不是我的应用程序临时目录。 【参考方案1】:

重启应用后tmp上的链接文件中resumeData无效将resuminData中的字段-"NSURLSessionResumeInfoLocalPath"改为tmp文件的正确路径。

使用:

NSMutableDictionary* resumeDictionary = [NSPropertyListSerialization propertyListWithData:resumingData options:NSPropertyListMutableContainers format:NULL error:&error];
...
NSString* badFilePath = [resumeDictionary objectForKey:@"NSURLSessionResumeInfoLocalPath"];
...
[resumeDictionary setObject:trueTmpfile forKey:@"NSURLSessionResumeInfoLocalPath"];
...
NSData* newResumingData = [NSPropertyListSerialization dataFromPropertyList:resumeDictionary format:NSPropertyListXMLFormat_v1_0 errorDescription:&errorDesc];

【讨论】:

以上是关于NSURLSession downloadTaskWithResumeData 在重新启动应用程序后给出错误的主要内容,如果未能解决你的问题,请参考以下文章

NSURLSession学习笔记Session Task

NSURLSession Threads:跟踪多个后台下载

将进度从 NSURLSession 发送到 ViewController [swift - iOS]

使用 NSURLSession 如何在取消下载任务时获取接收到的数据或临时文件位置

URLSession - 下载远程目录

从 url 下载时如何播放音频?