【发布时间】:2016-12-18 02:45:46
【问题描述】:
我们最近使用AFNetworking 3 中的AFURLSessionManager 从AFHTTPRequestOperation 迁移到NSURLSessionDownloadTask。我们的用户可以选择下载最多包含大约 5,000 个文件的项目。
这些文件主要是 PDF 和 MP4,大小从 10 KB 到 1 GB 不等。作为向使用 NSURLSession 和 AFURLSessionManager 迁移的一部分,我们很高兴能够在应用程序进入后台允许继续下载时将这些下载交给系统。但是我们遇到的是这些下载将开始失败,并显示
失去与后台传输服务的连接
-或-
“没有这样的文件或目录”
当用户选择下载超过 500 个文件时,这可能发生在后台或前台的应用程序中。然后,我们会在以后的任何下载中收到这些错误消息,直到我们终止并重新启动应用程序。
如果这是 iOS 的限制,NSURLSession 有后台配置,或者我们应该能够让它工作,有什么想法吗?
我们的 AFURLSessionManager 如下所示:
NSURLSessionConfiguration *configuration =
[NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.our.app.identifier.downloads"];
[configuration setHTTPMaximumConnectionsPerHost:5];
AFURLSessionManager *sessionManager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
[sessionManager setCompletionQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)];
任务如下所示:
NSURLSessionDownloadTask *downloadTask = [self.sessionManager downloadTaskWithRequest:[self requestForItem:item] progress:nil
destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];
return [NSURL fileURLWithPath:[filePath stringByAppendingPathComponent:@"fileid.ext"]];
} completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
// check for error and notify the ui of completion
}];
【问题讨论】:
-
我只想对新用户说,这是一个格式很好的问题。希望我能帮助你更多。
标签: ios afnetworking nsurlsession nsurlsessiondownloadtask