iOS模型层通知控制器对象

时间:2012-07-21 20:30:07

标签: ios xcode model-view-controller

https://developer.apple.com/library/mac/#documentation/General/Conceptual/DevPedia-CocoaCore/MVC.html

在上面的链接中,我看到了关于模型层应如何与ViewController通信的以下内容。

“当模型对象发生更改时(例如,通过网络连接接收新数据),它会通知控制器对象,该对象会更新相应的视图对象。”

我的问题是,模型对象如何通知Controller对象?有什么方法可以做到这一点?我的模型层获取用户的位置,然后调用Web服务。下载数据时应该如何通知控制器对象?

由于

1 个答案:

答案 0 :(得分:5)

根据具体情况,有几种方法可以做到这一点。通常,您将使用协议/委托实现,键值观察或通知。有一个非常好的概述here

修改

我想应该补充一下,正如对这个答案的评论所提到的:使用回调块也是一个非常可靠的选择,具体取决于您的需求。关于什么解决方案最适合哪些情况,有很多可能的决定因素,但这是我遵循的概要。

如果保证一次只需要一个观察者:我通常使用块或代表。我个人的偏好是,如果只有一两个回调,我会使用块,因为这是它们发光的地方,但如果有多种可能的方法,我会使用委托协议。

如果您可能需要多个观察员,我会通过NSNotificationCenter使用通知。

当我只需要观察实例上的特定属性而不是事件时,我使用Key-Value-Observing。