ios – 如何检查一个NSData blob是否作为NSDataSessionDownloadTask的resumeData有效?

ios – 如何检查一个NSData blob是否作为NSDataSessionDownloadTask的resumeData有效?,第1张

概述我有一个应用程序,使用后台下载与新的NSURLSession API.当下载取消或以提供NSURLSessionDownloadTaskResumeData的方式失败时,我存储数据blob,以便稍后恢复.很少的时候,我注意到在野外的崩溃: Fatal Exception: NSInvalidArgumentExceptionInvalid resume data for background d 我有一个应用程序,使用后台下载与新的NSURLSession API.当下载取消或以提供NSURLSessionDownloadTaskResumeData的方式失败时,我存储数据blob,以便稍后恢复.很少的时候,我注意到在野外的崩溃:
Fatal Exception: NSinvalidargumentexceptionInvalID resume data for background download. Background downloads must use http or https and must download to an accessible file.

这里出现错误,其中resumeData是NSData blob,session是NSURLSession的一个实例:

if (resumeData) {    downloadTask = [session downloadTaskWithResumeData:resumeData];    ...

数据由Apple API提供,序列化,然后在稍后的时间点进行反序列化.它可能已损坏,但它永远不会为零(如if语句检查).

我如何提前检查一下resumeData是无效的,以免我的应用崩溃?

解决方法 这是苹果建议的解决方法:
- (BOol)__isValIDResumeData:(NSData *)data{    if (!data || [data length] < 1) return NO;    NSError *error;    NSDictionary *resumeDictionary = [nspropertyListSerialization propertyListWithData:data options:nspropertyListImmutable format:NulL error:&error];    if (!resumeDictionary || error) return NO;    Nsstring *localfilePath = [resumeDictionary objectForKey:@"NSURLSessionResumeInfolocalPath"];    if ([localfilePath length] < 1) return NO;    return [[NSfileManager defaultManager] fileExistsAtPath:localfilePath];}

编辑(iOS 7.1不再是NDA):我从与苹果工程师的Twitter交流中获得了这一点,他建议做什么,我写了上面的实现

总结

以上是内存溢出为你收集整理的ios – 如何检查一个NSData blob是否作为NSDataSessionDownloadTask的resumeData有效?全部内容,希望文章能够帮你解决ios – 如何检查一个NSData blob是否作为NSDataSessionDownloadTask的resumeData有效?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1095328.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存