我有一个应用程序,当按下button
2中的view controller
时,需要在视图控制器1中更改菜单。实现这一目标的最佳方法是什么?
我已经听过很多关于NSNotification
的讨论,但我认为那是为了显示提醒?
答案 0 :(得分:4)
执行此操作的“正确”方法是将新状态写入应用程序的数据模型。当另一个视图控制器变为活动状态时,它应根据模型所说的更新其视图。这样,即使在用户进行更改时它们不存在,该信息也可供其他视图控制器使用。
通知是将信息传递给其他对象而不必具体了解它们的好方法,但通知仅在关注它的对象存在时才有效。
答案 1 :(得分:1)
你正在以错误的方式思考这个问题。一个视图控制器不应该关心另一个视图控制器中发生的事情。
如果点按的按钮导致菜单内容发生变化,则听起来就像是在更改数据。按下按钮应告诉模型层可用选项已更改,而另一个视图控制器应将可用选项从模型层加载到菜单中。
我听过很多关于NSNotification的讨论,但我认为那是为了显示警报?
不,它是以不将这些部分耦合在一起的方式将有关事件的信息分发给应用程序的其余部分。这不是与用户交互。
答案 2 :(得分:0)
NSNotification
是实现此目的的一种方式,不,它与警报无关。
它的工作方式如下:“生产者”可以发布(发送)通知。其他对象可以订阅通知并对通知作出反应。这是解耦对象的绝佳方法(目标通常是让每个对象尽可能少地了解另一个对象)。
搜索NSNotification tutorial
,有很多。您应该熟悉它们,它们在iOS和Mac OS X开发中使用很多,因为它们非常非常方便。
答案 3 :(得分:0)
如果您没有同时呈现两个视图控制器并且从viewcontroller1转换到viewcontroller2,则可以使用segue将信息从vc1传递到vc2。我认为通知很棒,但我认为没有必要。