Из документа Apple - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
будут доступны только сообщить об ошибке на стороне клиента через параметр ошибки.
Примечание. NSURLSession не сообщает об ошибках сервера с помощью параметра error. Единственными ошибками, которые ваше приложение получает с помощью параметра error, являются ошибки на стороне клиента, такие как невозможность разрешить имя хоста или подключиться к хосту. Коды ошибок описаны в разделе Коды ошибок системы загрузки URL. Об ошибках на стороне сервера сообщается с помощью кода состояния HTTP в объекте NSHTTPURLResponse.
Но, однако, когда я тестирую iOS9 с NSURLSessionDataTask
, кажется, что в настоящее время Apple сопоставляет некоторую ошибку HTTP с NSURLError
. Например, 404
to NSURLErrorFileDoesNotExist
. Этот факт опровергает некоторые предположения, которые у нас были раньше, и многие фрагменты также принимают параметр ошибки как ошибку соединения, это будет абсолютно неправильно.
Я пытаюсь найти и обнаружил, что Apple может упомянуть это изменение только в NSURLSessionDownloadTask
. И не очень хорошо задокументировано, как эти карты применяются.
В отличие от NSURLSessionDataTask или NSURLSessionUploadTask, NSURLSessionDownloadTask сообщает об ошибках на стороне сервера, сообщаемых с помощью кодов состояния HTTP, в соответствующие объекты NSError.
Лично я считаю, что команда разработчиков Apple совершила большую ошибку; И документ по-прежнему противоречив и не актуален, даже два года прошло без каких-либо обновлений.
У кого-нибудь есть дополнительная информация об этом изменении, когда оно будет введено? И как сейчас лучше всего отличить ошибку подключения от ошибки HTTP.