iOS 模型层通知控制器对象

Posted

技术标签:

【中文标题】iOS 模型层通知控制器对象【英文标题】:iOS model layer notifying Controller Object 【发布时间】:2012-07-20 16:34:15 【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

编辑:

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

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

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

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

【讨论】:

以上是关于iOS 模型层通知控制器对象的主要内容,如果未能解决你的问题,请参考以下文章

IO系统的功能和层次模型

IOS推送通知深度链接?

MVC架构是啥意思?

如何在 iOS 中最好地使用 MVC

iOS的MVC框架之控制层的构建(上)

Django 路由层,视图层,模板层