在我使用这个方法之前,我已经用过好几次了。
NSURLResponse *response;
NSError *error;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];在NSOperation中同步发送/接收数据,并已正常工作。
我现在正在做一个新的项目(新的API,新的服务器),错误就是没有被填充。
我使用Charles代理来窥探网络流量,我可以在Charles中看到从失败的请求返回的"Response Code 500 Internal Server Error“,但在应用程序中,error对象总是为nil。
正如我所说的,我以前使用过这个加载,如果发生错误,总是会填充错误。
在服务器端有什么我可以向服务器端开发人员指出的吗?他坚持认为我一定做错了什么。我唯一不明白的是Charles从中提取了响应码500。
注意:问题不在于发生了错误。问题是,当它确实发生时,NSError对象不会将它报告给我。只是为了澄清一下,以防有人告诉我让服务器开发人员来修复这个错误。:-)
发布于 2013-02-05 02:31:56
您的错误对象没有被填充,因为从NSURLConnection的角度来看,请求是成功的--也就是说,它能够向服务器发送数据并接收响应。
对于特定于协议的错误,您需要检查返回的NSURLResponse。在这种情况下,将响应强制转换为NSHTTPURLResponse并调用-statusCode。
发布于 2013-02-05 03:45:06
仅当没有来自服务器的响应或不是有效的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
https://stackoverflow.com/questions/14692813
复制相似问题