Cocoa中的MVC模式和模型对象初始化

时间:2012-10-22 18:09:45

标签: cocoa model-view-controller model

如果我使用NSArray的实例来填充弹出按钮,那么就MVC来说,NSArray需要初始化吗?我猜它会属于Model,但是如果是这样的话,我该如何初始化数组呢?我是否开始一个新的实现文件来包含该数组? (显然不想使用我的app委托文件,因为它属于Controller,而不是Model。)

4 个答案:

答案 0 :(得分:2)

MVC的“模型”部分是应用程序存储,呈现和/或允许用户操作的数据。无论您的应用程序是在Mac,iPhone还是其他任何设备上运行,都会大致相同。 “视图”是UI。这是用户实际在屏幕上看到的内容。控制器是介于这两者之间的部分。它负责为应用程序实现特定的行为逻辑,以及将视图层“粘合”到模型层。

因此,如上所述,要在弹出按钮中显示的项目数组可能是也可能不是模型的一部分。它完全取决于您正在实施的特定UI。如果选择在模型中表示的多个对象之间,则数组的内容确实是模型的一部分,但仍然可能是控制器以另一种形式将项目拉出模型并将它们转换为NSArray。它也可能是一种在两者之间进行选择的方法。一个固定的动作列表,在这种情况下,它更恰当地是控制器层本身的一部分。

换句话说,你的问题没有一个答案。但是,可能性是控制器将至少向UI提供所讨论的阵列,并且还可能对其内容负全部责任。这完全取决于你想要完成的事情。

答案 1 :(得分:0)

初始化将在模型对象中发生,但初始化可能会从视图控制器调用(我希望这些只是被称为控制器 - 没有ModelController类。)可能在viewDidLoad中,但实际上最适合您的地方用例需要。

答案 2 :(得分:0)

模型对象应该由控制器对象初始化,通常在viewDidLoad方法中。如果模型对象由另一个模型对象拥有(例如,如果您的自定义模型对象具有NSArray实例变量,那么您的自定义对象是父对象,而NSArray是子对象),那么应该在父模型对象的初始化方法中初始化子模型对象。

我认为你的NSArray本身就是一个模型对象,所以它应该在控制器对象的viewDidLoad方法中初始化。

答案 3 :(得分:0)

这只是一个答案,并不一定是每个人如何在目标C中开发应用程序。

如果我的应用程序包含小型数据模型或模型范围内的模型,我会将模型放在AppDelegate或viewControllers本身,如果它们的范围受限于该视图。

它们将被初始化为最接近应用程序中有意义的数据。

有时你会看到一个“FAT”viewController,它代表一个主屏幕控制器或主屏控制器,人们会在那个类上堆积模型。它很常见。

但是如果我有一个带有大型数据模型的应用程序 - 许多模型的生命周期不限于视图的生命周期 - 那么我将在我的应用程序中创建一个名为* myAppNameHere * AppModel的类,我将集中化存储应用程序模型,并根据需要使用服务类来请求数据填充/更新模型。

这只是一种方法。还有很棒的问题!