gpt4 book ai didi

cocoa - 在 cocoa 中将模型对象传递给 View Controller 的最佳实践

转载 作者:行者123 更新时间:2023-12-03 16:15:02 25 4
gpt4 key购买 nike

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

但是对于 Controller 对象来说,要调用模型对象上的方法,它需要对模型对象的引用。如果多个 Controller 需要更新模型对象,我们需要对模型对象的多个引用——每个 Controller 一个。

我不希望我的 Controller 进入全局空间来定位其他对象。我希望更高级别的应用程序对象能够连接较低级别的域对象。

我来自其他平台,我们在这些平台上使用 IOC 容器。

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

一个具体的例子:如果我将 CoreData 添加到 xCode 中的 cocoa 应用程序项目模板中,则 ManagedObjectContext 将在应用程序委托(delegate)中实例化。例如,如何将此实例传递给 View Controller 或嵌套 View Controller ?

我正在使用 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?

所以我个人认为这是一种反模式:在应用程序委托(delegate)中填充“全局”数据。

但是,这在 iOS 上很常见,正如您所注意到的,标准 Xcode 模板的作用也是如此。不幸的是。

为了使其更可行,我通常所做的是将 managedObjectContext 设置为应用程序委托(delegate)的私有(private)。然后,当另一个对象(主要是 UIViewController)需要访问此上下文时,我在实例化它时将其显式传递给 UIViewController

当该 View Controller 需要显示一个新的 View Controller 时,例如某些详细 View ,我再次将上下文传递给它。

那么至少有更明确的责任形式。它使测试变得更简单,因为 View Controller 只需要配置(或用 IoC 术语注入(inject)),而不是获取硬编码的全局对象。

我知道这不是您所问问题的完整答案,但我认为这是您问题中最有趣的一点。

关于cocoa - 在 cocoa 中将模型对象传递给 View Controller 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28971716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com