如何在iOS Objective C中处理来自Restful webservice调用的失败?

时间:2016-06-15 10:48:46

标签: ios objective-c web-services rest afnetworking

我正在使用AFNetworking从应用中调用webservices。一切都很好。由于我是iOS开发的新手,我以某种方式使事情工作,但我想学习实现东西和处理各种条件的正确方法。

以下是AFNetwork工作代码:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:url]];[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
[manager POST:url parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSLog(@"Success");
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
    NSLog(@"Error: %@", error);
}];

当我拨打服务电话时,如果呼叫失败(由于网络连接不良),那么在故障块中如何处理?假设它是一个重要的服务电话,如登录服务,那么我不能放弃,需要再次调用该服务..我浏览了很多但是到处都只是显示UIAlert说没有连接。但是,如果第一次呼叫失败,我不想使用警报......

我是否应该延迟一段时间致电服务,还是有其他解决方案?如果您有任何人更好地处理了这种情况,请回复......

1 个答案:

答案 0 :(得分:0)

通常我们只是显示错误的吐司或警报并相应地进行处理。如果您在故障块中看到有2个参数AFHTTPRequestOperation * operation& NSError *错误。根据状态代码,您可以在故障块中添加逻辑。我添加了示例代码

状态代码列表: - https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:url]];[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager POST:url parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject)
 {
     NSLog(@"Success");
 }
failure:^(AFHTTPRequestOperation *operation, NSError *error)
 {
     NSInteger statusCode = operation.response.statusCode;
     if(statusCode == 401) {
        //Add your logic
     } else if (statusCode == 404) {
        //Add your logic
     }
 }];