在调用堆栈中传播错误 - 目标c

时间:2013-04-22 14:42:35

标签: ios objective-c nserror

在典型的分层架构中,如何有效地将源自数据访问层的错误传达给UIViewContoller

我有以下设计:

  

UIViewController s - > datacontroller - > specificserviceproxy - > serviceproxybase

serviceproxybase启动对Web服务的调用。我在调用Web服务上的操作之前检查网络可用性,并希望在网络崩溃时提醒用户。

什么是最佳实践解决方案?感谢。

2 个答案:

答案 0 :(得分:1)

遵循我使用Cocoa-touch的模式。当出现错误时,许多方法会返回nilNO,并且此类方法的NSError输出参数包含有关错误的详细信息。

您可以根据需要传播结果并向上错误。或者图层可能会使用更多图层特定的错误包装错误并传递新错误。

遵循此模式的示例方法是:

NSFileManager copyItemAtPath:toPath:error:
NSFileManager attributesOfItemAtPath:error:

答案 1 :(得分:0)

您可以使用NSNotificationCenter发布和接收NSNotification个各种错误状态。

serviceproxybase中,您会为任何感兴趣的观察者发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"NoConnectionNotification" object:nil userInfo:someErrorInfoObject];

通常,您将在someErrorInfoObject中打包一个对象,该对象向观察者提供一些其他详细信息,例如NSError对象,失败的服务请求或服务的错误代码。在视图控制器中,您可以在viewDidLoadviewWillAppear

中收听该通知
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(handleNoConnectionError:)
                                             name:@"NoConnectionNotification"
                                           object:nil];

现在,每当发布名称为NoConnectionNotification的通知时,视图控制器都会收到一条消息handleNoConnectionError:,并显示相应的NSNotification