2012-12-26 31 views
1

为了向用户显示信息,我的iOS应用程序必须调用许多不同的Web服务。这就是为什么我创建了一个Connection Helper类,它使用NSURLConnection来调用我的服务器功能。这工作正常,它简化了我的其余视图,除了错误处理。在Connection Helper类中处理错误的好习惯

大多数情况下,如果我的帮手遇到HTTP 500错误,我希望它显示一条警报,而不显示我的视图中的实现。但是对于某些HTTP 500来说,显示警报是无关紧要的,我希望来自视图的不同行为。

现在,我在Connection Helper中只有很多if子句来处理不同的情况。我不喜欢这个解决方案,因为它不整齐。你有没有想到我可以创建一个整洁的结构来归档我想要做的事情?

示例: 调用具有错误ID的Web服务getItem将返回一个HTTP 500,并向用户显示错误是一种很好的行为。但是调用带有错误ID的deleteItem也会返回一个HTTP 500,但我不想将此错误显示给我的用户,因为它不相关。

+1

我不能确定你的连接助手的整体结构,但你可以有两种方法,比如像makeConnectionWithBlock:和makeConnectionWithBlock:failureBlock :,它的第一个将有你的默认处理,但允许自定义处理程序块的传球为第二种情况。 – shawnwall

+0

我认为这可能是一个整洁的想法!但是传递一个处理程序是否工作正常还是它有隐藏的缺点? – NLemay

+1

不是。查看https://github.com/AFNetworking/AFNetworking,获取基于块的网络操作的杰出示例。 – shawnwall

回答

0

肖恩沃尔的解决方案可能是解决这个问题的好方法。但我发现了另一个我更舒服的人。

我的连接助手类声明了一个委托ConnectionHelperDelegate。在这个类中,我创建了一个可选功能:

- (BOOL) connectionDidFailWithHttp500:(NSString *) errorMessage; 

然后,如果我委托具有这个功能,我把它叫做:

if([self.delegationListener respondsToSelector:@selector(connectionDidFailWithHttp500:)]){...} 

如果委托返回true,这意味着它会处理剩下的工作。如果它返回false,它会通知ConnectionHelper为它做。