cocoa - 未调用委托(delegate)

标签 cocoa uiviewcontroller delegates

我有一个ContactsViewController,每当选择一行时,就会打开MessageViewController(使用pushViewController)。 ContactsViewController 和 MessageViewController 都“注册”以接收 DatastoreDelegate 消息。奇怪的是,在加载我的应用程序时一切正常,但是一旦我导航到 MessageViewController,ContactsViewController 上的委托(delegate)方法就不再被调用。这两个 Controller 都应该处理 [messageAdded:(Message *)message] 方法,但只有 MessageViewController 在打开一次后会继续接收消息。

有人知道如何实现这项工作吗?

最佳答案

在 Cocoa 中,每个具有委托(delegate)的对象只有一个委托(delegate)(在任何给定时间)。该委托(delegate)是获取委托(delegate)消息的唯一对象。不存在“两个对象都注册以接收委托(delegate)消息”的真正概念。我的怀疑是,当您推送 MessageViewController 时,它会将自己设置为数据存储区的委托(delegate),然后 ContactsViewController 再也不会看到这些消息,因为它不会将自己设置回来。

我不知道您的代码是如何构造的,但您可以在每次 Controller 更改 View 时简单地移交委托(delegate),以便无论哪个事件状态都是当前委托(delegate)。

在 Cocoa 中,当一个对象需要向多个其他对象“广播”信息时,会使用通知模式(参见 NSNotificationCenter)。委托(delegate)实际上就像它们听起来的那样:一个对象,另一个对象可以选择依赖它来与其“合作”并提供关键功能。这是一种比通知观察者更亲密的关系。

关于cocoa - 未调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2185627/

相关文章:

objective-c - 添加和删​​除 View 时跳转到字段时出现问题

objective-c - 以编程方式绑定(bind) NSTableView 列

objective-c - 如何调试由 UIKit 的 CoreAnimation 调用触发的崩溃?

ios - 应用程序从多任务处理恢复后刷新 View

c# - 事件在 c# 和 silverlight 中向上传递对象链

objective-c - 示例中的 iOS- 协议(protocol)和委托(delegate)

swift - 停止 NSTokenField 修剪空格

SwiftUI - 使用 'pushViewController' 时出现 fatal error

swift - 如何在导航 Controller SWIFT 中呈现 View Controller

xcode - 何时在 Swift 中初始化委托(delegate)