NSError не заполняется

Несколько раз, прежде чем я использовал метод...

NSURLResponse *response;
NSError *error;

NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

для синхронной отправки/получения данных в NSOperation, и это сработало.

Сейчас я работаю над новым проектом (новый API, новый сервер), и ошибка просто не заполняется.

Я использую прокси-сервер Charles для отслеживания сетевого трафика и вижу, что «Код ответа 500, внутренняя ошибка сервера» возвращается из-за неудачного запроса в Charles, но в приложении объект ошибки всегда равен нулю.

Как я уже сказал, я использовал эту загрузку раньше, и ошибка всегда заполняется, если возникает ошибка.

Есть ли что-то на стороне сервера, на что я могу указать серверному разработчику? Он непреклонен, что я, должно быть, делаю что-то не так. Единственное, чего я не понимаю, так это того, что Чарльз получает от него код ответа 500.

Н.Б. Проблема не в том, что ошибка возникает. Проблема в том, что когда это происходит, объект NSError не сообщает мне об этом. Просто чтобы прояснить это на случай, если кто-нибудь скажет мне попросить разработчика сервера исправить ошибку. :-)


person Fogmeister    schedule 04.02.2013    source источник
comment
Почему минус? Дайте хотя бы информацию, почему?   -  person Fogmeister    schedule 05.02.2013


Ответы (2)


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

Для ошибок, связанных с протоколом, вам необходимо проверить полученный ответ NSURLResponse. В этом случае приведите ответ к NSHTTPURLResponse и вызовите -statusCode.

person jatoben    schedule 04.02.2013

Ошибка заполняется только в том случае, если нет ответа от сервера или нет действительного ответа HTTP, например. потеря соединения и т.д.

«Внутренняя ошибка сервера с кодом ответа 500» означает, что произошла внутренняя ошибка сервера, и ваш сервер возвращает HTTP-сообщение с кодом ответа 500. Вы должны использовать NSHTTPURLResponse вместо NSURLResponse и вызывать метод statusCode для проверки кода ответа HTTP. Если код ответа начинается с 2, все в порядке. Так что у меня обычно такой чек: statusCode / 100 == 2.

Дополнительные коды ответов HTTP см. на странице http://en.wikipedia.org/w/index.php?title=HTTP_response_codes

person Florian    schedule 04.02.2013