MVC模式的Apples部分描述是:“控制器更新模型。”我将其解释为:控制器调用模型上的方法,导致其内部状态发生变化。
但是对于控制器对象来调用模型对象上的方法,它需要对模型对象的引用。如果多个控制器需要更新模型对象,我们需要多次引用模型对象 - 每个控制器一个。
我不希望我的控制器伸出到定位其他对象的全局空间。我希望更高级别的应用程序对象连接更低级别的域对象。
我来自其他平台,我们使用IOC容器来制作这些东西。
寻找模型对象如何在cocoa应用程序中传递的最佳实践。
一个具体示例:如果我将CoreData添加到xCode中的cocoa应用程序项目模板,则会在app delegate中实例化managedObjectContext。如何将此实例传递给视图控制器或嵌套视图控制器?
我正在使用Swift。
答案 0 :(得分:2)
具体示例:如果我将CoreData添加到xCode中的cocoa应用程序项目模板,则会在app delegate中实例化managedObjectContext。如何将此实例传递给视图控制器或嵌套视图控制器?
所以我个人认为这是一种反模式:在应用代表中填充“全局”数据。
但是,这是iOS上非常常见的,正如您所注意到的那样,标准Xcode模板的作用。不幸的是
为了使这一点更加可行,我通常做的是让managedObjectContext
私有到app委托。然后,当另一个对象(主要是UIViewController
)需要访问此上下文时,我在实例化时明确地将其传递给UIViewController
。
当该视图控制器需要显示一个新的视图控制器时,例如一些细节视图,我再次将上下文传递给它。
然后至少有一种更明确的责任形式。它使测试变得更简单,因为视图控制器只需要配置(或以IoC术语注入),而不是抓取硬编码的全局对象。
我知道这不是你要问的完整答案,但我认为这一点是你提问中最有趣的。