在我使用这种方法之前几次......
NSURLResponse *response;
NSError *error;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
在NSOperation中同步发送/接收数据并且已经有效。
我现在正在开发一个新项目(新的API,新服务器),并且没有填充错误。
我正在使用Charles代理来窥探网络流量,我可以看到“响应代码500内部服务器错误”从Charles中的失败请求返回,但在应用程序中错误对象始终为零。
就像我说的那样,之前我已经使用过这个负载,如果发生错误,总会填充错误。
服务器端是否有东西可以指向服务器端dev?他坚持认为我一定做错了。我唯一不理解的是Charles正在从中获取响应代码500.
N.B。问题不在于错误发生。问题是,当它确实发生时,NSError对象不会将它报告给我。只是为了清除它,以防有人告诉我要求服务器开发人员修复错误。 : - )
答案 0 :(得分:7)
您的错误对象未填充,因为请求从NSURLConnection的角度成功 - 也就是说,它能够将数据发送到服务器并接收响应。
对于特定于协议的错误,您需要检查您获得的NSURLResponse。在这种情况下,将响应强制转换为NSHTTPURLResponse并调用-statusCode
。
答案 1 :(得分:2)
只有在没有来自服务器的响应或没有有效的HTTP响应时才会填充错误,例如:连接丢失等。
“响应代码500内部服务器错误”表示存在内部服务器错误,您的服务器返回带有响应代码500的HTTP消息。您应该使用NSHTTPURLResponse
而不是NSURLResponse
并调用{ {1}}检查HTTP响应代码的方法。如果响应代码以2开头,一切都很好。所以我通常会收到这样的支票:statusCode
。
有关更多HTTP响应代码,请参阅http://en.wikipedia.org/w/index.php?title=HTTP_response_codes