ios - NSUrlSessionDownloadTask - 进入后台时 didCompleteWithError

标签 ios nsurlsession nsurlsessiondownloadtask

当我通过按下电源按钮强制我的设备进入休眠模式时,我的后台任务通过调用委托(delegate)方法 didCompleteWithError 停止并出现错误:

The operation couldn’t be completed. Operation not permitted

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

有可能吗?如果没有,我有什么选择?我需要下载一个 300Mb 的文件,因此在连接较低的情况下,应用程序将在下载结束前进入休眠模式。

这是我创建的 session :

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

最佳答案

问题是数据保护能力被激活了。启用后,默认情况下所有文件都存储在 NSFileProtectionComplete 中,即使是 NSURLSession 用于下载的临时文件也是如此:

The default level of protection is complete protection, in which files are encrypted and inaccessible when the device is locked. You can programmatically set the level of protection for files created by your app, as described in “Protecting Data Using On-Disk Encryption” in iOS App Programming Guide.

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

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

来源:App Distribution Guide

关于ios - NSUrlSessionDownloadTask - 进入后台时 didCompleteWithError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25787822/

相关文章:

ios - NSURLSession HTTPMaximumConnectionsPerHost 未按预期工作

ios - 如何在 AFNetworking 3.0 中设置outputStream

ios - 如何使用 QuickBlox 在 Swift 中创建返回当前时间和日期之后发生的事件的查询

ios7 - 使用 NSURLSession 配置在 ios 7 中进行多个后台下载

iOS 7 - NSURLSession 可恢复上传

ios - 如何延迟方法直到 NSData 在 NSUrlSession 中完成加载?

ios - 在 iOS 上使用具有文件完整性的 NSURLSession 批量下载文件

iphone - 如果它们导致应用程序崩溃,如何查找内存泄漏?

ios - 关于 KVO 引用计数

ios - 在 Swift 中使用 NSURLSession 下载文件