iOS   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 如何检查一个NSData blob是否作为NSDataSessionDownloadTask的resumeData有效?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个应用程序,使用后台下载与新的NSURLSession API.当下载取消或以提供NSURLSessionDownloadTaskResumeData的方式失败时,我存储数据blob,以便稍后恢复.很少的时候,我注意到在野外的崩溃:
Fatal Exception: NSInvalidArgumentexception
Invalid 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有效?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。