导航控制器堆栈中视图之间数据传输的最佳实践

时间:2012-03-26 07:48:25

标签: iphone objective-c uinavigationcontroller

我有3个视图view1,view2和view 3.当我在视图3中时,我有一个在视图2中更改数据的问题。这里是我能想到的方式

  1. 拉出导航控制器堆栈,通过iskindof测试识别视图,获取变量并进行更改
  2. view 2从appdelegate获取值,从视图3获取值我只是在appdelegate中更新它并且它可以正常工作
  3. 使用通知中心并更改数据。
  4. 这是在我的案例中更改数据的最佳建议方式。

    数据只是对一组对象的值的更改。

1 个答案:

答案 0 :(得分:1)

如果您进一步进行重构,选项(1)是让您头疼的最高风险的方法。它也可能很繁琐,因此存在犯错的风险,然后不得不花费更多时间来修复它们。出于这些原因,最好避免它。

在(2)和(3)之间选择倾向于引发关于全局,封装等的意识形态争论。

即使你没有采用全局变量是邪恶的观点,使用UINotificationCenter还有很多要说的(3)。它鼓励你非常清楚地思考你正在采用的通信协议,它可以防止应用程序委托中的混乱,它往往是最稳定的重构,如果你想重新使用其他地方的视图你有一个良好的开端等

特别是,通过精心设计的通知,您经常会发现,如果您进一步重构,那么您的工作将会少得多 - 甚至没有 - 以保持代码正常运行。