nsurlconnection在返回时没有返回错误

时间:2013-10-13 02:17:15

标签: ios objective-c

确实

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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

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

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

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

回答你的问题:

  

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

     

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

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

  

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

如果你有一个状态代码,那么这意味着连接有效(从连接请求的角度来看,而不是HTTP),所以error == nil,数据应该不是nil

答案 1 :(得分:0)

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

关于状态代码:否,状态代码根本不会影响NSError。当NSError以非HTTP方式实际失败时,保留此NSURLConnection。例如,当您实际离线时,根本无法提出任何请求。另请注意,NSURLConnection不以任何方式与HTTP请求相关联。 iOS也支持开箱即用的FTP连接(这里没有HTTP中的状态代码),您甚至可以为几乎任何您能想到的内容编写自己的协议支持。

答案 2 :(得分:0)

当然,如果请求无法获取数据,则会发生NSError。但是,如果服务器返回任何其他状态代码而不是200,则会出现错误,因为您无法获取数据。但是,通过检查状态代码,您可以向用户提供更具体的错误消息,而不仅仅是Couldn't load data,因为您可以指定是否存在NSError,这可能是由于缺少互联网连接或您收到任何错误的状态代码和服务器都不可用..