在后台进入NSUrlSessionDownloadTask – didCompleteWithError
当我强迫我的设备通过按下电源button进入睡眠模式时,我的后台任务通过调用具有以下错误的委托方法didCompleteWithError
停止:
操作无法完成。 不允许操作
我怎样才能configuration我的NSURLSession即使在睡眠模式下继续下载?
这甚至有可能吗? 如果没有,我有什么select? 我需要下载一个300Mb的文件,所以在低连接时,应用程序将在下载结束之前进入睡眠模式。
以下是我的会议的创build:
static NSURLSession *backgroundSession; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ backgroundSession = [NSURLSession sessionWithConfiguration: [NSURLSessionConfiguration backgroundSessionConfiguration: @"com.myapp.mytask"] delegate:self. myDelegate delegateQueue:self.myQueue]; }); NSURLSessionDownloadTask *task = [backgroundSession downloadTaskWithRequest: self.urlRequest]; [task resume];
问题是激活数据保护function 。 启用这个function后,所有的文件都默认存储在NSFileProtectionComplete
,即使是用于NSURLSession
下载的临时文件:
默认的保护级别是完整的保护,当设备被locking时,文件被encryption并且不可访问。 您可以以编程方式设置您的应用程序创build的文件的保护级别,如“iOS应用程序编程指南”中的“使用磁盘encryption保护数据”中所述。
在该文件上激活NSFileProtectionComplete
时,当设备被locking时无法访问它。
我不知道如果临时的下载文件可以configuration为不使用数据保护,看来这是不是由NSURLSession
暴露。
来源: 应用程序分发指南