gpt4 book ai didi

ios - 如何检查 NSData blob 作为 NSURLSessionDownloadTask 的 resumeData 是否有效?

转载 作者:技术小花猫 更新时间:2023-10-29 10:57:03 26 4
gpt4 key购买 nike

我有一个应用程序使用新的 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.

错误发生在这里,其中 resumeDataNSData blob,sessionNSURLSession 的实例:

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

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

如何提前检查 resumeData 是否无效,以免应用崩溃?

最佳答案

这是 Apple 建议的解决方法:

- (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'd):我从 Twitter 与苹果工程师的交流中得到这个,他建议做什么,我写了上面的实现

关于ios - 如何检查 NSData blob 作为 NSURLSessionDownloadTask 的 resumeData 是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21895853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com