【问题标题】:NSError not being populatedNSError 没有被填充
【发布时间】:2013-02-04 18:10:51
【问题描述】:

之前我用过几次方法...

NSURLResponse *response;
NSError *error;

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

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

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

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

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

我可以向服务器端开发人员指出服务器端的某些内容吗?他坚持认为我一定做错了什么。我唯一不明白的是,Charles 正在从中获取响应代码 500。

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

【问题讨论】:

  • 为什么要投反对票?至少给我一些信息为什么?

标签: ios objective-c nserror


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    只有在没有来自服务器的响应或不是有效的 HTTP 响应时才会填充错误,例如连接丢失等。

    “响应代码 500 内部服务器错误”表示存在内部服务器错误,并且您的服务器返回响应代码为 500 的 HTTP 消息。您应该使用 NSHTTPURLResponse 而不是 NSURLResponse 并调用 statusCode 方法来检查 HTTP 响应代码。如果响应代码以 2 开头,一切都很好。所以我通常会有这样的支票:statusCode / 100 == 2

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

    【讨论】:

      猜你喜欢
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2014-06-18
      • 1970-01-01
      • 2023-03-29
      • 2011-11-15
      相关资源
      最近更新 更多