8

当我通过按电源按钮强制我的设备进入睡眠模式时,我的后台任务通过调用委托方法停止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];
4

1 回答 1

7

问题是数据保护功能已激活。启用该选项后,所有文件都NSFileProtectionComplete默认存储,即使是用于下载的临时文件NSURLSession

默认保护级别是完全保护,其中文件被加密并且在设备被锁定时无法访问。您可以通过编程方式为您的应用程序创建的文件设置保护级别,如 iOS 应用程序编程指南中的“使用磁盘加密保护数据”中所述。

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

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

来源:应用分发指南

于 2014-09-11T14:11:50.267 回答