大家好,这是我在堆栈上的第一个表达:)。我搜索了很多主题但没有找到答案。好的,这是我的问题:
在我的应用程序中,我正在使用NSURLSession - 后台下载。当我使用 cancelByProducingResumeData 时,一切都很顺利,我将 resumeData 保存在我的沙箱目录中,并使用
轻松恢复[session downloadTaskWithResumeData: resumeData];
重要的是我没有使会话对象无效。应用程序重新启动后,我正在创建新会话并尝试使用相同的方法继续下载 downloadTaskWithResumeData:,获取消息:
后台下载的简历数据无效。后台下载必须使用http或https,并且必须下载到可访问的文件。
有什么想法吗? :)
答案 0 :(得分:0)
我正在使用后台会话和相同的ID。我已经设法解决问题。我在运行模拟器时遇到了困难,这是非常重要的信息。我将 resumeData 保存在Library目录中,在运行时读取后, NSURLSessionResumeInfoLocalPath 键指的是不存在的目录。这是我的解决方案:
NSMutableDictionary *resumeDictionary = [NSPropertyListSerialization propertyListWithData:invalidResumeData options: NSPropertyListMutableContainersAndLeaves format:NULL error:&error];
if (!resumeDictionary || error) return nil;
NSString *localTmpFilePath = [resumeDictionary objectForKey:@"NSURLSessionResumeInfoLocalPath"];
if ([localTmpFilePath length] < 1) return nil;
NSString *localName = [localTmpFilePath lastPathComponent];
NSString *tempPath = NSTemporaryDirectory();
NSString *tempFile = [tempPath stringByAppendingString: [NSString stringWithFormat: @"%@", localName]];
[resumeDictionary setValue: tempFile forKey: @"NSURLSessionResumeInfoLocalPath"];
NSString *libDirectory = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES)[0];
libDirectory = [libDirectory stringByAppendingString: [NSString stringWithFormat: @"/%@/%@.tmp", kPathToResumeData, self.guid]];
NSData *newResumeData = [NSPropertyListSerialization dataWithPropertyList: resumeDictionary
format: NSPropertyListBinaryFormat_v1_0
options: 0
error: &error];