0

[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)

当数据不是零时返回错误=零?

如果有数据返回,错误总是为零吗?

这就是文档所说的......

http状态码如何影响错误?比如如果状态码不是 200,它总是返回错误吗?

4

3 回答 3

1

NSError 与 HTTP 响应无关。当连接本身失败时返回 NSError。错误的 HTTP 状态代码意味着请求本身适用于客户端。

您必须手动检查状态代码。

NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
int responseStatusCode = [httpResponse statusCode];

现在您可以测试状态是否为 200。

要回答您的问题:

当数据不是零时返回错误=零?

如果有数据返回,错误总是为零吗?

如果数据 == nil 那么你应该有错误!= nil

http状态码如何影响错误?比如如果状态码不是 200,它总是返回错误吗?

如果你得到一个状态码,那么这意味着连接工作(从连接请求的角度来看,而不是 HTTP 的)所以错误 == nil 并且数据不应该是 nil

于 2013-10-13T09:22:42.740 回答
0

您已经自己回答了前两个问题。文档就在那里。

关于状态码:不,状态码根本不影响NSError。这是为当 a以非 HTTP 方式实际失败NSError时保留的。NSURLConnection例如,当您实际上处于离线状态并且根本无法发出请求时。还要记住,这NSURLConnection与 HTTP 请求无关。iOS 还支持开箱即用的 FTP 连接(这里没有像 HTTP 这样的状态代码),您甚至可以为几乎任何您能想到的东西编写自己的协议支持。

于 2013-10-13T03:14:36.600 回答
0

当然,NSError如果请求未能获取数据,就会发生这种情况。但是如果服务器返回给你的状态码不是 200,就会像错误一样,因为你无法获取数据。但是通过检查状态代码,您可以向用户提供更具体的错误消息,而不仅仅是Couldn't load data,因为您可以指定是否有NSError可能是由于缺少 Internet 连接或您收到任何错误的状态代码并且服务器不可用引起的..

于 2013-10-13T08:50:16.010 回答