Iphone 目标C回调和通知

Iphone 目标C回调和通知,iphone,objective-c,Iphone,Objective C,我是Objective-C新手,不是全职程序员。我开始理解区分UI和模型的模型-视图-控制器设计模式。因此,用户执行一个操作,视图控制器向代理(模型)发送一条消息。但我不确定将操作从委托发送回视图控制器的最佳方式是什么 例如,用户按下按钮,VC向代理发送消息。那部分我理解。然后,代理采取行动,然后代理希望更新VC(例如,更新标签) 因此,我错过(或忘记)的是如何做到这一点,同时保持UI和模型之间的分离。我想我可以使用通知中心。或者我想我可以让视图控制器将回调传递给代理。或者我不知道还有别的选择。

我是Objective-C新手,不是全职程序员。我开始理解区分UI和模型的模型-视图-控制器设计模式。因此,用户执行一个操作,视图控制器向代理(模型)发送一条消息。但我不确定将操作从委托发送回视图控制器的最佳方式是什么

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


因此,我错过(或忘记)的是如何做到这一点,同时保持UI和模型之间的分离。我想我可以使用通知中心。或者我想我可以让视图控制器将回调传递给代理。或者我不知道还有别的选择。有人能给我一个建议吗?

基本上你是对的,你可以自己做所有与通知相关的事情(即通过NotificationCenter)但是由于我们在这里讨论的是UI内容,我强烈建议您在代码中使用
IBAction
-方法和
IBOutlet
-属性,您可以轻松地分别连接到UI元素及其在Interface Builder中的回调

有关此主题的基本介绍,请参见:
我希望这不会太难,我可以引导你们走上正确的道路。

首先,代表不是一个榜样

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

视图控制器应该对用户的操作作出反应。

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

我认为您对MVC范例有点误解。模型永远不应该是视图的委托,因为模型不应该有任何视图类的依赖关系或知识。通常,视图会向其委托或目标(如果您使用的是target/action)发送一条消息,这通常是一个控制器(通常是iOS上
UIViewController
的子类)。然后,控制器访问模型中的数据,并可以更新任何需要更新的视图。我建议你阅读这本书,以获得更完整的解释

模型不必是被动的。它保存业务数据以及与业务数据关联的规则和方法。模型不应该知道视图或控制器。它无法对它们中的任何一个执行操作。除非你开始搞砸了。它可能持有的方法可能只对数据本身有影响。如果你说你在你的模型中执行视图控制器或视图层的动作,那么我不会雇佣你……“用户按下按钮,VC消息代表。我理解的那一部分。”或者至少你把术语弄混了。