Ios 如何使webservice通过NSURLConnection传递错误';s连接:错误:?

Ios 如何使webservice通过NSURLConnection传递错误';s连接:错误:?,ios,web-services,nsurlconnection,Ios,Web Services,Nsurlconnection,web服务需要做什么才能使NSURLConnection的委托接收connection:didfailwitheror:消息 例如: iOS应用程序将令牌传递给web服务,web服务查找令牌,然后web服务需要响应一个错误,称为“无效令牌”或类似的内容 当前,已接收数据,并在“connectiondFinishLoading:”中分析错误消息。这意味着我在两个地方进行错误检查,这是我试图避免的 我完全控制着iOS应用程序和web服务。根据我的经验(编程中最危险的三个词),-connection:

web服务需要做什么才能使
NSURLConnection的
委托接收
connection:didfailwitheror:
消息

例如: iOS应用程序将令牌传递给web服务,web服务查找令牌,然后web服务需要响应一个错误,称为“无效令牌”或类似的内容

当前,已接收数据,并在“
connectiondFinishLoading
:”中分析错误消息。这意味着我在两个地方进行错误检查,这是我试图避免的

我完全控制着iOS应用程序和web服务。

根据我的经验(编程中最危险的三个词),
-connection:didFailWithError:
仅在HTTP交换失败时调用。这通常是网络错误或身份验证错误(我不使用身份验证)。如果HTTP消息成功,无论响应代码是什么,都会调用
-connectiondifinishload:

我的解决方案:当我检测到错误时,调用
-连接:didFailWithError:
。这样,我所有的错误处理代码都在一个地方

在我的
-connectiondFinishLoading:
的顶部,我有:

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

虽然与您的问题没有直接关系,但我鼓励您转到更高级别的库。我可以诚恳地推荐AFNetworking,它已经投入生产,我已经在许多项目中使用过它。这将允许您检查故障块中每个请求的响应代码。这个项目还抽象出了许多低层次的处理,否则您将需要编写网络通信;我在这里讲的是解析和创建XML/JSON字符串以与服务通信

为了给您的问题提供更集中的答案,一旦您注意到
connectiondFinishLoading:
中的错误,我将调用NSURLConnection的
cancel
方法。这将自动取消请求并调用委托对象的failure方法


NSURLConnection的文档非常枯燥,委托的失败方法没有专门记录失败案例。您可以在中找到更多信息。

NSUrlConnection的委托连接:didFailWithError:可以在许多条件下调用。以下是这些条件的列表。我认为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"); 
} 

我看不见森林

我需要从
连接:didFailWithError:
后退一步,看看不同的委托方法
连接:didReceiveResponse:

在web服务完全由我控制的情况下,端点可以响应500个状态代码,该代码在
连接:didReceiveResponse
中获取,并传递一些JSON进一步解释情况,该代码在
连接:didReceiveData:
中获取和处理

NSURLConnection委托在整个过程中会挂起更多的状态位,但它具有迄今为止我发现的最好的代码味道


是目前为止最正确的:连接:didFailWithError:回调仅与网络故障有关,来自web服务的任何响应都表示连接没有失败

第一个提到的<代码>连接在杰弗瑞的注释中应该是<代码>连接:DeDebug WiTrror:<代码>,对吗?我想得越多,我就越认为你可能是最正确的答案(虽然是一个明确的参考点)。代理回调是*connection:*didFailWithError:不是webService:didFailWithError:关于调用
-取消
的有趣建议。文档说明:
调用此方法后,连接的委托不再接收连接的任何消息。
这让我相信,
-connection:didFailWithError:
不会被调用,尽管实际应用可能会出现不同的结果。谢谢,但问题是我需要做什么才能使我控制下的web服务触发didFailWithError:delegate回调。