NSURLConnectionDownloadDelegate проблема с файлом - PullRequest
11 голосов
/ 13 октября 2011

Теперь, когда 5.0 запущен и мы можем обсуждать его, не нарушая NDA Apple, у меня возникла проблема с новой версией NSURLConnection.У него есть новый делегат NSURLConnectionDownloadDelegate с двумя ключевыми методами.

  1. connection:didWriteData:totalBytesWritten:expectedTotalBytes: вызывается повторно, пока идет загрузка файла

  2. connectionDidFinishDownloading:destinationURL: вызывается один раз, когда загрузка завершена.

Затем загруженный файл должен находиться по адресу destinationURL (по крайней мере, на весь срок службы этого метода - предполагается, что вы его получите и переместите в какое-то постоянное место).Вопрос в том, что его там нет.Этот каталог пуст.Я сообщил об этом Apple как об ошибке, и они сказали мне, что это дубликат проблемы, о которой они уже знают.

Если у кого-то есть обходной путь или он может успешно использовать этот делегат,пожалуйста, дайте мне знать.

ОБНОВЛЕНИЕ 17.10.2011: Я отказался от этого и вернулся к старому делегату, который все еще прекрасно работает в 5.0, даже если в документации сказано, что методы делегата доступны только через4,3.

Ответы [ 4 ]

4 голосов
/ 15 декабря 2012

Видимо только для использования с приложениями Newsstand. Этот парень мог бы найти работу вокруг:

http://adamernst.com/post/18948400652/a-replacement-for-nsurlconnectiondownloaddelegate

Либо просто используйте NSURLConnection. Однако, если вы реализуете методы NSURLDownloadDelegate, они переопределяют стандартные методы делегата NSURLConnection. Если это удобный didWriteData: метод NSURLConnectionDownloadDelegate, который вы хотите, например, чтобы обновить UIProgressView, вы можете добиться того же, извлекая общий размер файла из ответа http и используя didReceiveData: метод NSURLConnection.

1 голос
/ 04 ноября 2011

Народ,

Недавно я обнаружил этот новый протокол NSURLConnectionDataDelegate.Однако документация по iOS 5 является неполной.

Новый протокол NSURLConnectionDataDelegate находится в документации, а новая версия NSURLConnection, которая его использует, - нет.В этой документации все еще говорится, что мы должны использовать устаревшие методы протокола NSURLConnectionDelegate.

Я понял, что теперь NSURLConnection будет загружать данные с удаленного URL-адреса непосредственно в файл на локальном диске, во многом как класс NSURLDownload в Mac OS.Как мне понять, как это работает?

Заголовок для NSURLConnection намекает на то, что объект соединения определяет, что вы хотите, основываясь на том, какой версии протокола NSURLConnectionDelegate соответствует делегат.Это кажется действительно отвратительным.Я никогда не слышал об использовании соответствия протокола делегата как способа управления поведением класса.

1 голос
/ 01 декабря 2011

Даже сейчас NSURLConnectionDownloadDelegate не работает.

Вот хорошая замена: http://github.com/jbrennan/JBContainedURLConnection

1 голос
/ 13 октября 2011

Документация сообщает, что файл гарантированно существует только при вызове метода делегата, поэтому вам нужно будет скопировать его куда-нибудь еще в момент вызова метода делегата.

Google сообщает, что у людей возникают проблемы, когдаСервер отправляет загадочное имя файла и / или mime-тип.

...