Подтвердить что ты не робот

Методы NSURLConnection больше недоступны в IOS5

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

4b9b3361

Ответ 1

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:

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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