如何使Web服务通过NSURLConnection的的连接传递错误:didFailWithError

2019-07-29 05:39发布

什么是Web服务需要做的,使NSURLConnection's代表接收connection:didFailWithError:消息?

例如:iOS应用传递令牌到Web服务,Web服务查找令牌,然后将Web服务需要与一个错误说“无效令牌”或类似的东西作出反应。

目前,该数据被接收,并在“ connectionDidFinishLoading :”解析错误消息。 这意味着我的错误在两个地方,而我试图避免检查。

我有我的完全控制下,无论是iOS应用和Web服务。

Answer 1:

根据我的经验(这三个节目中最危险的话), -connection:didFailWithError:只有当HTTP交换失败调用。 这通常是网络错误或可能的身份验证错误(我不使用身份验证)。 如果HTTP消息成功,无论是响应代码, -connectionDidFinishLoading:被调用。

我的解决办法:拨打-connection:didFailWithError:当我发现一个错误。 这样,我所有的错误处理代码是在一个地方。

在我顶-connectionDidFinishLoading:我有:

NSError *error;
NSDictionary *result = [self parseResultWithData:self.connectionData error:&error];
if (!result) {
    [self connection:connection didFailWithError:error];
    return;
}


Answer 2:

有许多关于其委托的连接条件:didFailWithError:NSURLConnection的可能invoke.Here的人的名单错误或常量 。我觉得一个alertview会更好,以显示连接HTTP错误:didFailWithError :.

-(void) connection:(NSURLConnection *)connection   didFailWithError: (NSError *)error 
{   
UIAlertView *errorAlert= [[UIAlertView alloc] initWithTitle: [error localizedDescription] message: [error localizedFailureReason] delegate:nil                  cancelButtonTitle:@"Done" otherButtonTitles:nil];  
[errorAlert show];   
[errorAlert release];     
NSLog (@"Connection Failed"); 
} 


Answer 3:

虽然不直接关系到你的问题,我会鼓励你移动到一个更高的水平库。 我非常乐意推荐AFNetworking,它是生产做好准备,我已经在很多项目中使用它。 这将允许你检查的不良区的每个请求的响应代码。 该项目还抽象了很多,否则你将被要求写网络通信水平低处理; 我在这里讲的有关分析和创建XML / JSON字符串与服务进行通信。

为了让大家更集中回答你的问题,我会打电话的cancel您NSURLConnection的方法,一旦你已经注意到一个错误connectionDidFinishLoading: 这将自动取消该请求,并调用该委托对象的故障的方法。

为NSURLConnection的文档是相当干燥,和委托的失败的方法并没有具体记载的故障的情况。 您可以找到更多信息, 网址加载系统编程指南 。



Answer 4:

我不能只见树木不见的阿甘。

我需要从退一步connection:didFailWithError:看看不同的委托方法connection:didReceiveResponse:

随着全我的控制下的Web服务,端点可以用一个500个状态码,其获取拿起回应connection:didReceiveResponse ,并沿着一些JSON进一步说明情况,这被捡起和处理通过connection:didReceiveData:

该NSURLConnection的委托挂到整个过程状态的夫妇更位,但它有最佳的代码味道到目前为止,我已经找到。

杰弗里的回答是迄今为止最正确的: connection:didFailWithError:回调仅是相对于网络的失败,从Web服务的任何响应意味着连接没有失败!



文章来源: How to make webservice pass errors through NSURLConnection's connection:didFailWithError:?