2

如果我执行以下操作:
- 创建一个基于文档的应用程序项目;
- 创建一个继承自 NSView 的类,我称之为 CustomView;
- 将视图拖入 document.xib 并将其类设置为 CustomView;
- 将视图与文档连接起来,使用我称之为 customView 的插座;
- 在文档中添加一个 IBAction,我将其命名为 Foo;
- 将 mainmenu.xib 文件中的此 IBAction 连接到菜单项;

然后在 IBAction 内所有的出口都为零:

- (IBAction) Foo: (id) sender
{
    NSLog(@"%p",customView);
}

它打印 0x0。
所有 IBOutlets 都会出现此问题,并且仅当 IBAction 与菜单项链接时。如果我尝试打印实例变量,则它们具有正确的值。

4

1 回答 1

3

不要在 中创建新Document对象MainMenu.xib,因为所做的只是创建一个与您正在打开Document的实际 s 没有任何关系的全新对象Document(因此, 的 nil 值customView)。

相反,要使用 获取活动Document对象customView,请将带有您指定的菜单项连接IBAction到-如果没有其他响应者处理它,First ResponderAppKit 会自动将操作消息沿链向上传递到活动子类。Document也许阅读事件处理文档中的“操作消息”:(参考)。

于 2012-08-05T19:44:52.320 回答