NSUrlSessionDownloadTask - 当进入后台时didCompleteWithError

时间:2014-09-11 12:46:02

标签: ios nsurlsession nsurlsessiondownloadtask

当我通过按电源按钮强制我的设备进入睡眠模式时,我的后台任务会通过调用委托方法didCompleteWithError而停止并显示错误:

  

无法完成操作。不允许操作

如何配置我的NSURLSession以便在睡眠模式下继续下载?

甚至可能吗?如果没有,我有什么选择?我需要下载一个300Mb的文件,所以如果连接速度很低,应用程序将在下载结束前进入睡眠模式。

以下是我的会话的创建:

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];

1 个答案:

答案 0 :(得分:6)

问题是数据保护功能已激活。启用该功能后,默认情况下所有文件都会以NSFileProtectionComplete存储,甚至是NSURLSession用于下载的临时文件:

  

默认保护级别是完整保护,即文件   当设备被锁定时,它们被加密并且不可访问。您可以   以编程方式设置您的文件创建的文件的保护级别   应用程序,如iOS中的“使用磁盘加密保护数据”中所述   应用编程指南。

在该文件上激活NSFileProtectionComplete时,您无法在设备锁定时访问它。

我不确定临时下载文件是否可以配置为不使用数据保护,NSURLSession似乎没有公开。

来源:App Distribution Guide