将模型对象传递给cocoa中的视图控制器的最佳实践

时间:2015-03-10 18:46:45

标签: cocoa cocoa-touch cocoa-design-patterns

MVC模式的Apples部分描述是:“控制器更新模型。”我将其解释为:控制器调用模型上的方法,导致其内部状态发生变化。

但是对于控制器对象来调用模型对象上的方法,它需要对模型对象的引用。如果多个控制器需要更新模型对象,我们需要多次引用模型对象 - 每个控制器一个。

我不希望我的控制器伸出到定位其他对象的全局空间。我希望更高级别的应用程序对象连接更低级别的域对象。

我来自其他平台,我们使用IOC容器来制作这些东西。

寻找模型对象如何在cocoa应用程序中传递的最佳实践。

一个具体示例:如果我将CoreData添加到xCode中的cocoa应用程序项目模板,则会在app delegate中实例化managedObjectContext。如何将此实例传递给视图控制器或嵌套视图控制器?

我正在使用Swift。

1 个答案:

答案 0 :(得分:2)

  

具体示例:如果我将CoreData添加到xCode中的cocoa应用程序项目模板,则会在app delegate中实例化managedObjectContext。如何将此实例传递给视图控制器或嵌套视图控制器?

所以我个人认为这是一种反模式:在应用代表中填充“全局”数据。

但是,这是iOS上非常常见的,正如您所注意到的那样,标准Xcode模板的作用。不幸的是

为了使这一点更加可行,我通常做的是让managedObjectContext私有到app委托。然后,当另一个对象(主要是UIViewController)需要访问此上下文时,我在实例化时明确地将其传递给UIViewController

当该视图控制器需要显示一个新的视图控制器时,例如一些细节视图,我再次将上下文传递给它。

然后至少有一种更明确的责任形式。它使测试变得更简单,因为视图控制器只需要配置(或以IoC术语注入),而不是抓取硬编码的全局对象。

我知道这不是你要问的完整答案,但我认为这一点是你提问中最有趣的。