【发布时间】:2011-10-01 15:42:22
【问题描述】:
我正在尝试了解如何更好地实现模型-视图-控制器设计模式。
什么对象应该“拥有”模型对象?单个控制器是否应该实例化(拥有)模型对象?
这是一个示例场景:
我有一个包含两个 UIViewController(controllerA 和 controllerB)的 UITabbarController。显然,这些控制器都不拥有彼此。我有一个模型对象,其中包含一些数据并执行一些网络活动。 controllerA 和 controllerB 都需要能够对 Model 对象进行更改。 controllerB 需要知道何时对 Model 对象进行了更改(通过 controllerA 或从网络活动返回的结果)。从最近的阅读:
- 我需要模型对象和控制器 B 之间的 KVO?
- 模型对象应该是单例吗?这样两个控制器都可以修改它?
- 在更简单的应用程序中,我让 viewController 拥有 Model 对象。有什么方法可以让一个控制器实例化 Model 对象,而其他控制器可以对其进行写访问?
- 我还阅读了有关使用应用程序委托拥有模型对象并允许控制器通过应用程序委托共享实例进行访问的信息。这似乎有点难看 - 使用应用程序委托单例全局访问我的模型对象。让我的模型对象成为单例不是更好吗?
- 我看到有人在 SO 上给this 链接到 iPhoneDevSDK,但他的方法的原因让我无法理解。再说一次,这不是让应用程序委托参与一些应该只是单例的事情吗?
主要是,除了通过 Model 作为单例之外,两个 Controller 是否可以通过其他方式访问(写入)一个 Model?
此外,当一个控制器拥有另一个控制器时(例如,在 UINavigationController 中,当根视图控制器实例化另一个视图控制器以堆叠在自身之上时),共享模型的最佳方法是让根视图控制器实例化模型,并在将其推送到导航堆栈之前将其传递给下一个视图控制器)?
【问题讨论】:
标签: iphone objective-c ios model-view-controller object