【问题标题】:iOS/Cocoa - Design Pattern for Data Model <-> ControlleriOS/Cocoa - 数据模型 <-> 控制器的设计模式
【发布时间】:2014-01-27 10:50:14
【问题描述】:

(我已经阅读了很多关于此的 stackoverflow 帖子,以及一般的 Cocoa MVC,但大多数都与视图控制器之间的信息共享有关。)

鉴于以下情况:

  • 负责下载、解析、验证和存储(XML 或 JSON 派生)数据的 DataModel 类,

  • 一个 ViewController 类,它将实例化单个 DataModel 对象,并且需要随着时间的推移从该 DataModel 获取信息(例如更新视图以反映模型中的更改)

问。处理模型数据更改通知以及将该数据提供给 View Controller 的最佳做法是什么?

我见过的方法包括:

  • Model 类发布通知,提供通知的 userInfo 字典中的数据。视图控制器监听通知,查看用户信息。例如Apple 的 SeismicXML 示例代码。

  • Model类定义了一个Protocol,ViewController作为代理,响应Model的具体协议方法。

  • Model 类保存一个指向 View Controller 的指针,直接调用 View Controller 中的方法或属性。 (我必须说,我不喜欢这个,因为它需要模型和控制器之间的紧密绑定。)

我倾向于通知方法,但想听听其他人的意见。

【问题讨论】:

    标签: ios cocoa design-patterns model-view-controller


    【解决方案1】:

    如果只有一个视图控制器类,并且该类实例化模型类,那么委托方法更合适。当多个类需要获取信息时,或者当控制器在层次结构中与模型类分离很大时,最好使用通知,从而难以获得正确的引用来设置委托。

    【讨论】:

      【解决方案2】:

      我会不惜一切代价避免将模型存储指针指向视图控制器。这是正常职责的倒置。在 MVC 中,模型应该独立于任何控制器运行。

      委托/协议模式适用于在视图控制器的生命周期内创建和销毁的短期模型。

      通知和 KVO 是我处理底层模型更改的主要方式。它允许模型长期存在并独立于在其生命周期内创建和销毁的控制器工作。

      【讨论】:

      • 感谢大家的帮助。我确实从列表中错过了 KVO,但已经阅读了它,并将其添加到武器库中。我将针对此特定任务使用通知,但将来会考虑其他选项。干杯。
      【解决方案3】:

      它不在您的列表中,但 Key-Value Observing 可能对您正在做的事情有用。它将允许 iOS 为您发送通知。

      您可以在“KVO”标题下阅读更多信息here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-29
        • 2010-10-02
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多