9

我正在为 iPhone 开发一个多视图应用程序,目前我的视图(视图)设置和它们的转换(控制器?)运行良好。现在我想为实际的程序数据(模型)添加对象。

我的问题是:我应该如何构建我的数据以遵守模型视图控制器 (MVC) 设计模式?我知道我应该创建单独的类来实现我的数据结构,并且我的控制器类可以将消息从视图传递给它们,但是我应该检查任何其他组织考虑因素吗?尤其是 Cocoa Touch、Xcode 或 iOS 特有的那些?

其他细节:播放预先录制的和可能是用户生成的音频也很重要。我知道这些是模型元素,但它们与“V”和“C”的关系我仍然有点模糊。我想当用户操作需要音频播放时,控制器应该将消息传递给模型以准备适当的声音,但是播放的调节究竟应该在哪里进行呢?在我想象的与 ViewController 分开的“PlayerController”中?

非常感谢并原谅我的 MVC noobery。

4

2 回答 2

8

Caleb 很好地介绍和概述了如何思考这个问题。在您的特定情况下,以下是您可能会给出描述的一些部分:

  • Clip (M) - 负责保存实际的音频数据。它会知道如何解释数据并给出有关它的信息,但它实际上不会播放任何东西。

  • 播放器 (V) - 实际上在扬声器上播放剪辑。是的,这是 MVC 中的一种视图。音频只是另一种呈现方式。也就是说,你永远不会称它为“PlayerView”,因为这表明它是 UIView 的子类。

  • PlayerView (V) - 播放器的屏幕表示。对剪辑一无所知。

  • ClipManager (C) - 一个对象,它将跟踪系统中的所有剪辑并管理从网络中获取它们、添加和删除它们到缓存等。

  • PlayerViewController (C) - 从 ClipManager 中检索 Clip,并协调 Player 和 PlayerView 以显示和播放它,以及任何其他 UI 元素(如“后退按钮”等)。

这只是一个示例,说明您如何将其分解为一些理论上的音频播放器应用程序。有许多正确的 MVC 方法可以做到这一点,但这是一种思考方式。

于 2011-03-08T04:23:22.747 回答
7

约翰·沃芬勋爵(我敢肯定,他之前的某个人)说:“性格就是你在黑暗中的样子。” 好吧,模型是应用程序在无人看时的样子——它是定义应用程序行为方式的数据和逻辑,而不管它在屏幕上如何呈现。

想象一下,您决定向您的应用程序添加一个命令行界面。您仍然希望使用相同的结构来管理数据,并且基于数据进行排序、筛选和计算的逻辑也应该相同。无论用户如何查看或与应用程序交互,您的应用程序中仍然重要/有用的代码就是模型。

模型可以非常简单,完全由标准对象组成。iOS 应用程序通常更多的是检索、存储和显示数据,而不是处理数字,因此拥有一个仅包含字典数组或字典层次结构的模型并不罕见。如果您查看 Core Data 的 NSManagedObject 类,它在许多方面与 NSMutableDictionary 相似。所以,如果合适的话,不要害怕使用标准对象。

也就是说,您当然也可以创建自己的模型对象,如果您想要对数据强制执行某些要求,或者如果您希望能够从数据中获取信息,这将非常有用。

初学者经常想知道每个控制器如何访问模型。一些人提倡为此使用单例模式,主要是因为它提供了一个单一的、共享的、全局可访问的对象。我不推荐这个。相反,在您的应用程序中有一些高级对象,例如应用程序委托创建/加载模型(这可能是许多单独对象的图),并将指向模型的指针指向任何需要它的视图控制器。如果这些控制器依次创建其他视图控制器,它们可以再次向其子控制器提供指向模型(或模型的一部分)的指针。

我希望这会有所帮助。

于 2011-03-08T03:47:38.233 回答