NSURLSession: загрузка ресурсов с фоновой передачей
Как лучше всего использовать фоновую передачу для загрузки ресурсов из галереи?
Похоже на uploadTaskWithRequest:fromData:
не работает с NSURLSession
создан с backgroundSessionConfiguration
поскольку это вызывает исключение: "Завершение приложения из-за необработанного исключения" NSGenericException ", причина:" Задачи загрузки в фоновых сеансах должны быть из файла ". Судя по описанию исключения, фоновая передача не должна работать и с потоковыми задачами загрузки.
Справедливо. uploadTaskWithRequest:fromFile:
это первое, что приходит на ум, когда вы думаете о загрузке данных, которые у вас уже есть на диске. Но NSURLSession Class Reference говорит нам, что этот метод работает только с URL-адресами файлов, но когда вы получаете URL-адрес ресурса, он начинается с "assets-library://asset/..." и предоставление этого пути тоже не работает.
Таким образом, кажется, что единственный оставшийся вариант - скопировать файл из библиотеки ресурсов во временный каталог и предоставить его URL-адрес файла uploadTaskWithRequest:fromFile:
, Но это не имеет никакого смысла, потому что у вас уже есть файл активов, сохраненный на вашем диске. Я что-то пропустил?
Обновить:
Поговорил с инженером Apple на мероприятии Tech Talks, и он подтвердил, что фон NSURLSession поддерживает только URL-адреса файлов. Таким образом, вам действительно нужно скопировать библиотеку ресурсов во временный каталог и предоставить ее URL-адрес файла uploadTaskWithRequest:fromFile:
загрузить его с фоном NSURLSession. Это поведение может измениться в будущем, хотя.
1 ответ
Они также говорят где-то в документации, что URL для загрузки / выгрузки поддерживают только http-схемы файла http. Фон поддерживает только http / https.
Я считаю, что базовые URL-адреса библиотеки данных и ресурсов, несмотря на то, что они являются технически допустимыми, в действительности не являются URL-адресами и, скорее всего, не реализуются путем создания пользовательских NSurlprotocol-ов.
Поэтому я склонен полагать, что вы должны записать ресурс в какой-либо файл и передать URL-адрес этого файла для загрузки задачи. Я работаю над проектом, который также загружает ресурсы, и я только что начал преобразовывать его в nsursession, используя фоновую сессию. Итак, я попробую это для себя позже сегодня, чтобы доказать теорию.