Как я могу получить NSURLResponse тело? - PullRequest
31 голосов
/ 10 июня 2010

Я пишу приложение, которое подключается к серверу, используя NSURLConnection.

В методе делегата didreceiveresponse, если код состояния 404, я отменяю соединение и хочу показатьсообщение с пользовательской ошибкой, которая генерируется на сервере.

Проблема в том, что из объекта ответа я могу получить только код состояния, заголовки, mimetype и т. Д., Но без тела.

Как получить сообщение тела от NSURLResponse?

1 Ответ

27 голосов
/ 06 января 2011

Почему вы отменяете соединение? В конце концов, 404 также может иметь содержимое тела. Только не отменяйте это, и позвольте программе вызывать следующий метод NSURLConnection делегата. Когда данные [тело содержимого] отправляются, вызывается - (void)connection:(NSURLConnection *) didReceiveData:(NSData *), вам нужно получить данные там. Читать соответствующую часть в документации :

Ответ сервера на запрос можно рассматривать как две части: метаданные, описывающие содержимое, и данные содержимого URL. Метаданные, общие для большинства протоколов, инкапсулированы классом NSURLResponse и состоят из типа MIME, ожидаемой длины содержимого, кодировки текста (где применимо) и URL-адреса, предоставившего ответ.

Классы NSURLConnection и NSURLDownload предоставляют интерфейс для создания соединения, указанного объектом NSURLRequest, и загрузки содержимого. Объект NSURLConnection предоставляет данные делегату в том виде, как они получены из исходного источника, тогда как NSURLDownload объект записывает данные запроса непосредственно на диск. Оба класса предоставляют расширенную поддержку делегатов для реагирования на перенаправления, проблемы аутентификации и условия ошибок.

Что касается примера реализации делегата:

-   (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData{
    NSLog(@"String sent from server %@",[[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding]);

}
...