使用loadNibNamed后无法访问任何插座

时间:2009-11-23 00:04:56

标签: objective-c coda

编辑:如果有人想查看实际代码,请按以下步骤操作: http://pastie.org/713951

长话短说:我遇到的问题是我无法让窗口显示在fly()函数中。

完整说明

我正在为Mac应用程序'Coda'创建一个插件。我有一个控制器'Bolder',有两个插座:

@class Bolder;

@interface Bolder : NSObject
{
    IBOutlet id MyLabel;
    IBOutlet id theWindow;
}

Coda指定它自己的插件的init方法。在这个init方法中,我正在加载一个Nib'Superman'并选择一个方法'fly'来点击我的插件时调用:

[NSBundle loadNibNamed:@"Superman" owner:self];
[controller registerActionWithTitle:NSLocalizedString(@"OK!", @"Flying Man") target:self selector:@selector(fly:)];

在'fly'方法中,我想显示窗口并更改标签上的文字:

- (void)fly:(id)sender
{
    [theWindow orderFront:self];
    [theWindow makeKeyAndOrderFront:self];
    [MyLabel setStringValue:@"new text"];
}

最后一点是投掷我的部分 - 窗口没有出现!然而,如果我将这三条相同的行放在'awakeFromNib'中,它就显示出来了。造成这种差异的原因是什么?我无法将此代码放在awakeFromNib中,因为每次启动Coda时都会显示我的插件窗口。

2 个答案:

答案 0 :(得分:0)

如果您不想在加载笔尖时显示该窗口,请取消选中Interface Builder中的“Visible At Launch”。

答案 1 :(得分:0)

尝试延迟你的笔尖加载,直到显示窗口为止。 E.g:

- (void)fly:(id)sender
{
    if (!theWindow) 
    {
        [NSBundle loadNibNamed:@"Superman" owner:self];
    }
    else
    {
        [theWindow makeKeyAndOrderFront:self];
    }
}