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

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

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

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

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

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

4b9b3361

Ответ 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]);

}