Как получить загруженные данные неудачной NSURLSessionDownloadTask?

Я хотел бы знать, могу ли я получить данные частичного скачивания неудачной NSURLSessionDownloadTask.

Мой вариант использования:

  1. Запускаю загрузку файла размером 1024МБ
  2. 512 МБ загружены
  3. Загрузка не удалась из-за сбоя сети
  4. При сбое загрузки вызывается ошибка delagte - (void) URLSession: (NSURLSession *) session: (NSURLSessionTask *) task didCompleteWithError: (NSError *). Но объект ошибки не содержит пути к файлу загруженных данных размером 512 МБ.

У меня вопрос: можно ли получить загруженные 512 МБ с помощью API NSURLSession в фоновом сеансе?

Спасибо,


person yostane    schedule 15.10.2014    source источник
comment
Не похоже. Вам, вероятно, следует написать свою собственную версию; не может быть сложно.   -  person Droppy    schedule 15.10.2014
comment
Что вы подразумеваете под написанием собственной версии? Должен ли я создать подкласс NSURLSessionDownloadTask?   -  person yostane    schedule 15.10.2014
comment
Нет, используйте сетевые классы платформы iOS или AFNetworking и т. Д. И создайте класс, который выполняет загрузку за вас.   -  person Droppy    schedule 15.10.2014
comment
Но мне нужно воспользоваться фоновым режимом NSURLSession, чтобы загрузка продолжалась, когда приложение находится в фоновом режиме. Насколько мне известно, AFNetworking не поддерживает фоновый nsurlsession.   -  person yostane    schedule 15.10.2014
comment
Ах хорошо; тогда вы не сможете написать свое собственное.   -  person Droppy    schedule 15.10.2014
comment
В заключение, ответ на мой пост - нет, я не могу. Спасибо за ответы ^^.   -  person yostane    schedule 15.10.2014


Ответы (2)


В документации Apple указано:

В случае сбоя передачи объект сеанса предоставляет объект NSError либо вашему делегату, либо обработчику завершения задачи. В этом объекте ключ NSURLSessionDownloadTaskResumeData в словаре userInfo содержит объект resumeData.

Источник: https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/#//apple_ref/occ/instm/NSURLSession/downloadTaskWithResumeData:

person user1261532    schedule 11.05.2015

В дополнение к уже опубликованному ответу (и его расширению) вы можете получить доступ к уже загруженным данным через сам объект error следующим образом:

NSData* resume_data = error.userInfo[NSURLSessionDownloadTaskResumeData];
person Ash    schedule 02.08.2016