模型如何与View Controller对话?

时间:2010-07-22 01:30:03

标签: iphone objective-c model-view-controller

这是我无法开始工作的东西......我可以让视图控制器与我的自定义对象进行通信....但是如何从我的对象向视图控制器发送消息? / p>

从myViewController到myObject的消息看起来像 [myObject doSomething]。

相反的信息会是什么样的?以其他方式发送消息甚至是否有意义?

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

您可以将控制器传递给模型,但通常您希望模型不依赖于视图或控制器。

为了避免这种情况,请创建一个模型想要与之交谈的协议,让视图控制器实现它,并让模型获取协议的实例,而不是视图控制器作为属性。

答案 1 :(得分:3)

我经常使用NSNotificationCenter将模型对象的更新广播到感兴趣的控制器。对于更紧密绑定的交互,请考虑为模型对象创建委托协议。

通知主要是单向的,尽管侦听器可以访问发送通知的模型对象。可以有任意数量的感兴趣的参与方,包括控制器来来往往,但模型是持久的。

委托是双向的,但一次只能有一个委托。通常,委托人应该比委托的对象寿命更长。委托可能适用于需要额外用户输入的模型对象生命周期阶段。

通知和代理可以同时使用。与UIApplication一样,代理通常在发送通知之前被调用。

答案 2 :(得分:2)

为什么你希望你的模型首先与任何东西积极交谈?视图控制器是应用程序流的主动管理器,并启动与模型的通信,而不是相反。

你能说一个更具体的例子,你真的需要这样做吗?

就像你怀疑自己一样,大多数时候“以其他方式发送信息”没有意义。但如果你真的需要这样做,那么从模型中“传出”信息的适当方式是{{ 3}}你可以让你的模型发送通知,视图控制器或任何其他对象可以订阅这些通知,如果他们关心,但没有从模型到其他应用程序片段的紧密耦合。