NSURLConnection методы больше не доступны в IOS5 - PullRequest
29 голосов
/ 18 октября 2011

Я смотрел на класс NSURLConnection, который можно использовать для установления синхронизации или асинхронного подключения к URL-адресу, а затем извлекать его данные ... в этот класс было внесено много изменений с IOS 5, и я ' мы видели, что они внедрили некоторые формальные протоколы, связанные с аутентификацией или загрузкой, но я не вижу, например, если сообщение connection:didReceiveResponse: (которое было ранее отправлено делегату и которое больше не доступно) все еще доступно в некоторых протоколы. Как реализовать асинхронное соединение и получить, например, заголовки HTTP, как только ответ получен? Я уверен, что есть способ лучше, чем использовать NSURLConnection вместе с сообщением connection:didReceiveResponse:. Такие методы, как stringWithContentsOfURL, всегда загружают содержимое синхронно? Что вы используете для реализации асинхронных загрузок в своих приложениях, избегая устаревших методов и реагируя на такие события, как _http response receive_m и т. Д.? Запускаете ли вы синхронные загрузки в фоновых задачах, если это возможно?

Ответы [ 4 ]

68 голосов
/ 26 октября 2011

NSURLConnectionDelegate стал формальным протоколом (это был неформальный протокол в предыдущих версиях).В этом протоколе объявлены следующие (не рекомендуется) методы:

  • connection:didFailWithError:
  • connectionShouldUseCredentialStorage:
  • connection:willSendRequestForAuthenticationChallenge:

Кроме того, есть два подпротокола, которые соответствуют NSURLConnectionDelegate:

NSURLConnectionDataDelegate используется для делегатов, которые загружают данные в память, и объявляет следующие методы, некоторые из которых, я уверен, вынайду знакомых:

  • connection:willSendRequest:redirectResponse:
  • connection:didReceiveResponse:
  • connection:didReceiveData:
  • connection:needNewBodyStream:
  • connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
  • connection:willCacheResponse:
  • connectionDidFinishLoading:

NSURLConnectionDownloadDelegate используется для делегатов, которые сохраняют данные непосредственно в файл на диске, и объявляет следующееметоды:

  • connection:didWriteData:totalBytesWritten:expectedTotalBytes:
  • connectionDidResumeDownloading:totalBytesWritten:expectedTotalBytes:
  • connectionDidFinishDownloading:destinationURL:

Как видите, вы все еще можете использоватьваши предыдущие делегаты, возможно, с некоторыми незначительными изменениями.

Для получения дополнительной информации см. документ Различия API от iOS 4.3 до iOS 5.0 *1061* и NSURLConnection.h в вашей локальной установке XCode.Когда выпускается новая версия SDK, нередко документация внутри заголовочных файлов будет более надежной, чем документация, доступная в библиотеке разработчика.Для того, чтобы последняя была актуальной, требуется некоторое время.

2 голосов
/ 15 октября 2012

НЕТ! Они НЕ ограничены для использования при проверке подлинности и проблемах, если вы внимательно изучите библиотеку Apple.

После введения +(void)sendAsynchronousRequest:queue:completionHandler: в объект класса NSConnection многие вещи, которые могут выполнять столько же методов NSConnectionDelegate, сколько раньше, теперь могут использоваться в формальных протоколах, называемых "NSConnectionDataDelegate" & NSConnectionDownloadDelegate, открывая новую комнату для добавления больше возможностей для NSURLConnection методов. (начиная с iOS5)

Так что я думаю, что это улучшение, не ограничивающее их использование.

2 голосов
/ 26 октября 2011

Я только что столкнулся с этой же проблемой.Похоже, что отправка асинхронного запроса более упрощена с блоками и NSOperationQueue.

+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler

Это означает, что делегат теперь используется только для проверки подлинности и ошибок.

0 голосов
/ 12 марта 2012
...