许多任务(NSURLSessionDownloadTask)与背景会话导致失败使用AFNetworking
问题描述:
我们最近迁移从AFHTTPRequestOperation
在AFNetworking 3
使用AFURLSessionManager
NSURLSessionDownloadTas
ķ。我们的用户可以选择下载最多可包含约5,000个文件的项目。许多任务(NSURLSessionDownloadTask)与背景会话导致失败使用AFNetworking
这些文件主要是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
}];
答
IIRC,在火焰NSURLSession
爆炸,如果你尝试添加多了几个对会话有十几项任务。当你达到500时,你几乎肯定会打破它。这是一个已知的错误,因为堆栈溢出的其他人已经遇到它并提出了一些错误。也就是说,请提出一个错误,因为苹果获得的这个问题越多,它的优先级就越高。
通常的解决方法是保留挂起请求的外部队列,然后在其他任务完成时将任务添加到会话中。
我只是想为新用户说这是一个出色的格式化问题。希望我能更多地帮助你。 –