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

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

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

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

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

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

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

我正在使用Swift.

最佳答案

concrete example: If I add CoreData to the cocoa application project template in xCode, the managedObjectContext is instantiated in the app delegate. How do I pass this instance to, for instance, a view controller or a nested view controller?

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

但是,这是iOS上非常常见的,正如您所注意到的,标准Xcode模板的功能.不幸.

为了使这更加可行,我通常做的是将managedObjectContext设为私有的app delegate.然后,当另一个对象(主要是UIViewController)需要访问此上下文时,我在实例化它时将其显式传递给UIViewController.

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

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

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

点赞