1

在我使用该方法之前几次...

NSURLResponse *response;
NSError *error;

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

在 NSOperation 中同步发送/接收数据并且它已经工作。

我现在正在开发一个新项目(新 API、新服务器),但没有填充错误。

我正在使用 Charles 代理来窥探网络流量,我可以看到来自 Charles 中的失败请求的“响应代码 500 内部服务器错误”,但在应用程序中,错误对象始终为零。

就像我说的,我之前使用过这个负载,如果发生错误,总是会填充错误。

服务器端有什么我可以向服务器端开发人员指出的东西吗?他坚持认为我一定做错了什么。我唯一不明白的是查尔斯正在从中获取响应代码 500。

注意问题不在于错误正在发生。问题是,当它确实发生时,NSError 对象没有将它报告给我。只是为了清除它,以防有人告诉我要求服务器开发人员修复错误。:-)

4

2 回答 2

7

你的错误对象没有被填充,因为从 NSURLConnection 的角度来看请求是成功的——也就是说,它能够向服务器发送数据并接收响应。

对于特定于协议的错误,您需要检查返回的 NSURLResponse。在这种情况下,将响应转换为 NSHTTPURLResponse 并调用-statusCode

于 2013-02-04T18:31:56.050 回答
2

仅当服务器没有响应或不是有效的 HTTP 响应(例如连接丢失等)时才会填充错误。

“Response Code 500 Internal Server Error”是指发生了内部服务器错误,你的服务器返回了一个响应码为500的HTTP报文。你应该使用NSHTTPURLResponse代替NSURLResponse并调用该statusCode方法来检查HTTP响应码。如果响应代码以 2 开头,一切都很好。所以我通常有这样的支票:statusCode / 100 == 2.

有关更多 HTTP 响应代码,请参阅http://en.wikipedia.org/w/index.php?title=HTTP_response_codes

于 2013-02-04T19:45:06.387 回答