【问题标题】:Objective C Callbacks and NotificationsObjective C 回调和通知
【发布时间】:2010-07-20 07:23:01
【问题描述】:

我是 Objective-C 的新手,不是全职程序员。我开始了解用于区分 UI 和模型的模型-视图-控制器设计模式。所以用户采取行动,视图控制器向委托(模型)发送消息。但我不确定将动作从委托发送回视图控制器的最佳方式是什么。

例如,用户按下按钮,VC 向代表发送消息。那部分我理解。然后代表采取行动,然后代表想要更新 VC(例如,更新标签)。

所以我错过(或忘记了)这是如何完成的,同时保持 UI 和模型之间的分离。我想我可以使用通知中心。或者我想我可以让视图控制器将回调传递给委托。或者也许还有另一个我不知道的选择。有人可以给我推荐一下吗?

【问题讨论】:

  • “用户按下按钮,VC 向代表发送消息。我理解那部分。”考虑一下,也许你没有。或者至少你把术语弄混了。

标签: iphone objective-c


【解决方案1】:

我认为您对 MVC 范式有些误解。模型不应该是视图的代表,因为模型不应该有任何视图类的依赖或知识。通常,视图向其委托或目标(如果您使用目标/动作)发送消息,该委托或目标通常是控制器(通常是 iOS 上 UIViewController 的子类)。然后控制器访问模型中的数据,并可以更新任何需要更新的视图。我建议阅读MVC fundamentals guide 以获得更完整的解释。

【讨论】:

    【解决方案2】:

    基本上你是对的,你可以自己做所有与通知相关的事情(即使用 NotificationCenter),但由于我们在这里讨论 UI-Stuff,我强烈建议你使用 IBAction-Methods 和 @987654323 @-您的代码中的属性,您可以轻松地连接到 UI-Elements 和它们在 Interface Builder 中的回调。

    可以在此处找到有关此主题的非常基本的介绍: iPhone SDK Interface Builder basic training 我希望它不是太基本的艰难,并且我可以带领你走上正轨。

    【讨论】:

      【解决方案3】:

      首先,委托不是模型。

      模型是被动的,只保存数据(数据库、plist、数组、字典等)。
      而委托是为了对某些事件做出反应而存在的一组函数。
      在您的情况下,委托更有可能成为视图控制器。

      视图控制器应该对用户的操作做出反应。
      如果按钮点击应该在某个标签中显示模型中的一些数据,那么视图控制器应该完成所有工作(接收用户的操作,从模型中获取必要的数据并将其显示在视图上......)。

      【讨论】:

      • 模型不必是被动的。它保存着业务数据以及与业务数据相关的规则和方法。
      • 模型不应该知道视图或控制器。它不能对它们中的任何一个执行操作。只有当你开始把所有东西都弄乱的时候。它可能采用的方法可能仅对数据本身产生影响。如果您说您用于在视图控制器中执行操作或从模型中查看图层,那么我不会雇用您...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2011-10-16
      • 2013-01-22
      相关资源
      最近更新 更多