31

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

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

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

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

ответ

26

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

Ответ от сервера на запрос можно рассматривать как две части: метаданные, описывающие содержимое и данные контента 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]); 

} 
+2

Если вы делаете синхронный вызов, хотя, вы не используете методы делегата. Вы получаете результат сразу: [NSURLConnection sendSynchronousRequest: запрос returnResponse: & response error: & err] – Oscar

Смежные вопросы