我有一个ContactsViewController,只要选择了一行,就会打开MessageViewController(使用pushViewController)。 ContactsViewController和MessageViewController'都'注册'以接收DatastoreDelegate消息。奇怪的是它在加载我的应用程序时工作正常,但是一旦我导航到MessageViewController,我的ContactsViewController上的委托方法就不再被调用了。这两个控制器都应该处理[messageAdded:(Message *)message]方法,但只有MessageViewController在打开消息后才会继续接收消息。
有没有人知道如何使这项工作?
答案 0 :(得分:1)
在Cocoa中,具有委托的每个对象只有一个委托(在任何给定时间)。该委托是获取委托消息的唯一对象。没有真正的概念让“两个对象都被注册以接收委托消息”。我怀疑当你推送MessageViewController时,它将自己设置为数据存储区的委托,然后ContactsViewController再也看不到这些消息了,因为它没有自行设置。
我不知道您的代码是如何构建的,但是每次控制器更改视图时您都可以简单地切换代理,因此当前代理处于活动状态。
在Cocoa中,当对象需要将信息“广播”到多个其他对象时,使用通知模式(请参阅NSNotificationCenter)。代表们听起来确实如此:另一个对象可选地依赖于“与之合作”并提供关键功能的对象。与通知观察员相比,这是一种更亲密的关系。