为什么基于文档的应用程序IBActions中的IBOutlets是零?

时间:2012-08-05 15:24:07

标签: objective-c interface-builder osx-lion automatic-ref-counting

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

然后在IBAction内部所有出口都是零:

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

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

1 个答案:

答案 0 :(得分:3)

不要在Document中创建新的MainMenu.xib对象,因为所有这一切都会创建一个全新的Document对象,该对象与实际Document无关。你正在打开(因此,customView的零值。)

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