编辑:如果有人想查看实际代码,这里是: http: //pastie.org/713951
长话短说:我遇到的问题是我不能让窗口显示在 fly() 函数中。
完整说明:
我正在为 Mac 应用程序“Coda”创建一个插件。我有一个控制器“Bolder”,有两个插座:
@class Bolder;
@interface Bolder : NSObject
{
IBOutlet id MyLabel;
IBOutlet id theWindow;
}
Coda 为插件指定了它自己的 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 时都会显示我的插件窗口。