我有一个ContactsViewController-每当选择一行时,都会打开MessageViewController(使用pushViewController)。 ContactsViewController和MessageViewController都“注册”以接收DatastoreDelegate消息。奇怪的是,在加载应用程序时一切正常,但是一旦导航到MessageViewController,ContactsViewController上的委托方法就不再被调用。这两个控制器都应该处理[messageAdded:(Message *)message]方法,但是只有MessageViewController在打开一次之后才继续接收消息。
有人对如何进行这项工作有任何想法吗?
最佳答案
在可可中,每个带有委托的对象只有一个委托(在任何给定时间)。该委托是获取委托消息的唯一对象。没有真正的概念是“两个对象都注册为接收委托消息”。我的怀疑是,当您推送MessageViewController时,它会将自己设置为数据存储区的委托,然后ContactsViewController再也不会看到这些消息,因为它不会将自己设置回去。
我不知道您的代码的结构,但是每次控制器更改视图时,您都可以简单地传递委托,以便当前委托是活动的。
在可可中,当对象需要将信息“广播”到多个其他对象时,将使用通知模式(请参阅NSNotificationCenter)。委托听起来确实像是:一个对象,另一个对象可以选择依赖该对象与之“伙伴”并提供关键功能。它比通知观察者更亲密。
关于cocoa - 代表未被调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2185627/