我一定错过了一些简单的东西,但我看不到它。首先,设置:
DATreeView, 的一个子类NSViewDATreeViewController, 的一个子类NSViewControllerMainMenu.xib有一个 的实例DATreeViewController,它被配置为从DATreeView.xibMainMenu.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:作为其操作,菜单项将自动激活。
我究竟做错了什么?感谢大家的宝贵帮助!