Как я могу получить тело NSURLResponse?

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

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

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

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


person telemaco    schedule 10.06.2010    source источник


Ответы (1)


Почему вы отменяете соединение? В конце концов, 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]);

}
person Özgür    schedule 06.01.2011
comment
Однако если вы выполняете синхронный вызов, вы не используете методы делегата. Вы сразу получаете результат: [NSURLConnection sendSynchronousRequest: request ReturnResponse: & response error: & err] - person Oscar; 13.12.2012