我有一个NSWindowController的子类,我用来从笔尖加载窗口并在屏幕上显示它。下面是我想要显示窗口时调用的代码。在10.6调用showCustomWindow时,将显示窗口,但在10.5中,必须调用此方法两次才能显示窗口。
-(IBAction)showCustomWindow:(id)sender
{
if(!windowController){
windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow"];
}
[windowController showWindow:self];
}
选中“启动时可见”窗口并取消选中它似乎没什么区别。
编辑:我意识到我遇到的问题与我的NSWindowController或showWindow无关。我有正确的设置。但我确实发现并非所有类都实现了awakeFromNib。在我的一个NSView子类中(我在尝试加载的nib中),我正在调用[super awakeFromNib],它给了我一个“不响应选择器”(但只有10.5才是奇怪的)。所以,我本可以刚刚取出[超级awakeFromNib],但我选择了希望更强大的功能:
if([NSView instancesRespondToSelector:@selector(awakeFromNib)]) {
[super awakeFromNib];
}
这允许我的笔尖正常加载并且showWindow正常工作。
答案 0 :(得分:4)
如果您想使用-showWindow:
来控制该窗口可见性的时间,则应取消选中“启动时可见”。
其他所有似乎就在您向我们展示的内容中所以这只是一个猜测,但您忘记将文件所有者对象上的window
插座连接到您的窗口笔尖?
答案 1 :(得分:0)
你是否在窗口从其笔尖加载之前调用-showWindow?您可能希望在[MyWindowController awakeFromNib]中设置断点以查找。
答案 2 :(得分:0)
编辑:好的抱歉,我误解了你的问题,发现你需要两次调用showWindow。我没有答案。
您看到的行为是正确的,因为方法initWithWindowNibName:
实际上不会加载笔尖。 Nib加载发生在lazily ..所以在你调用showWindow
方法或其他需要加载nib的window
方法之后。