Мы недавно мигрировали из AFHTTPRequestOperation
в NSURLSessionDownloadTas
к используя AFURLSessionManager
в AFNetworking 3
. Наши пользователи имеют возможность загрузки элементов, которые могут содержать до 5000 файлов.Многие задачи (NSURLSessionDownloadTask) с фоновой сессией приводит к сбою при помощи AFNetworking
Эти файлы в основном PDF и MP4 и имеют размер от 10 КБ до 1 ГБ. В рамках перехода на использование 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
}];
Я просто хотел сказать для нового пользователя, что это был отличный отформатированный вопрос. Хотел бы я помочь тебе больше. –