Из документов:
The only case where this message is not sent to the delegate is when the protocol implementation encounters an error before a response could be created.
NSURLConnectionDelegate Class Reference
Таким образом, NSURLConnection мог не прежде, чем он получает ответ, однако он может не после. Поскольку соединение: didFailWithError прекращает дальнейшие сообщения для этой связи следующие два сценария может произойти:
- запускается соединение, не удается получить ответ и связь: didFailWithError называется.
- Соединение запускается и получает ответ, соединение: didReceiveResponse: вызывается, по какой-либо причине соединение по какой-либо причине (например, сетевое подключение может выпадать), до вызова connectionDidFinishLoading.
Вам нужно будет получить код статуса HTTP из соединения: didReceiveResponse, если этот метод не вызывается, код статуса отсутствует, так как он является частью ответа. Если вам нужно получить доступ к нему из-под подключения: didFailWithError, вам нужно будет записать его.
Обратите внимание, что, чтобы получить код статуса, вы должны будете также случаю NSURLResponse к NSHTTPURLResponse так:
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"Status code %ld", httpResponse.statusCode);
Таким образом, когда соединение: didReceiveResponse: называется, она может либо закончиться в связи: didFinishLoading: или соединение: didFailWithError:? –
Если это удастся, оно вызовет didReceiveData: где вам нужно записать данные (самый простой способ - использовать appendData на объекте NSMutableData) перед вызовом didFinishLoading: если он успешный. Если он не работает, он может по-прежнему вызывать didReceiveData перед сбоем (поскольку соединение может потерпеть неудачу в любой точке). Но да, соединение должно либо в конечном итоге вызвать соединение: didFinishLoading или connection: didFailWithError: –
Извините за поздний ответ !! Как фиксировать сетевые ошибки, такие как 400, 404, 500 и т. Д. Получают ли они уведомление в связи: didReceiveResponse: или connection: didFailWithError:? –