来自apple's doc - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
只会通过错误参数报告客户端错误。
注意:NSURLSession不会通过error参数报告服务器错误。您的应用通过error参数接收的唯一错误是客户端错误,例如无法解析主机名或连接到主机。 URL加载系统错误代码中描述了错误代码。 通过NSHTTPURLResponse对象中的HTTP状态代码报告服务器端错误。
但是当我在iOS9中使用NSURLSessionDataTask
进行测试时,似乎苹果将一些HTTP错误映射到NSURLError
。例如,404
to NSURLErrorFileDoesNotExist
。这个事实打破了我们以前的假设,many snippet also take the error parameter as connection error,这绝对是错误的。
我尝试搜索并发现Apple可能只在NSURLSessionDownloadTask
中提及此更改。并没有详细记录如何应用这些地图。
与NSURLSessionDataTask或NSURLSessionUploadTask不同,NSURLSessionDownloadTask将通过HTTP状态代码报告的服务器端错误报告给相应的NSError对象。
我个人认为Apple的Dev团队犯了一个大错误;并且文件仍然不一致而且不是真的,即使两年过去也没有任何更新。
有人提供有关此更改的更多信息吗? 现在区分连接错误和HTTP错误的最佳方法是什么。
答案 0 :(得分:0)
答案与以往一样。如果您的服务器发送带有200错误代码的错误(例如,在JSON响应中),则您必须自己处理该检查。否则:
请注意,成功定义为以下任何一项:
如果您的定义不同(例如,如果您的服务器通过重定向到错误页面来响应无效的URL),则需要添加委托方法来检测重定向并将其视为错误。