我一定错过了一些简单的东西,但我看不到它。首先,设置:
DATreeView
, 的一个子类NSView
DATreeViewController
, 的一个子类NSViewController
MainMenu.xib
有一个 的实例DATreeViewController
,它被配置为从DATreeView.xib
MainMenu.xib
还有一个 的实例DendreaAppDelegate
,它有一个DATreeViewController
插座(连接到MainMenu.xib
' 的DATreeViewController
实例。Do Something!
,一个连接起来的菜单项,用于向doSomething:
第一响应者发送消息。- 并非巧合,
DATreeViewController
有一个动作叫doSomething:
.
我想要的是Do Something!
菜单项触发doSomething:
操作DATreeViewController
,让我们假设我不能直接设置目标/操作连接。我会在这里停下来问,我的设计完全错误吗?我正在尝试做的事情是愚蠢/邪恶/可能在我的上帝眼中让我感到羞耻吗?
不?伟大的。现在,对于我的生活,我无法让菜单项处于活动状态。我在 Snow Leopard 上这样做,如果这有什么不同的话。
为了实现NSView
和之间的良好集成NSViewController
,例如管理响应者链,我遵循了Matt Gallagher 的示例,进行了一项实质性更改:在 NIB 加载过程中NSView
似乎没有收到setViewController:
消息,所以我自己发送该消息DATreeViewController
的loadView
讯息。据我所知,在运行以下代码后applicationDidFinishLaunching:
NSView *view = self.treeViewController.view;
[self.window.contentView addSubview:view];
响应者链按预期设置,即:
NSWindow < NSView < DATreeViewController < DATreeView
我的期望是,作为DATreeViewController
响应者链的一部分,作为响应者链的一部分,作为响应者doSomething:
,并且因为它不实现验证,我所要做的就是使用 Interface Builder 将Do Something!
菜单项连接到 First Responder 代理,doSomething:
作为其操作,菜单项将自动激活。
我究竟做错了什么?感谢大家的宝贵帮助!