为什么我必须在我的NSWindowController上调用showWindow两次10.5?

时间:2009-10-07 02:49:26

标签: cocoa nswindow nswindowcontroller showwindow

我有一个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正常工作。

3 个答案:

答案 0 :(得分:4)

如果您想使用-showWindow:来控制该窗口可见性的时间,则应取消选中“启动时可见”。

其他所有似乎就在您向我们展示的内容中所以这只是一个猜测,但您忘记将文件所有者对象上的window插座连接到您的窗口笔尖?

答案 1 :(得分:0)

你是否在窗口从其笔尖加载之前调用-showWindow?您可能希望在[MyWindowController awakeFromNib]中设置断点以查找。

答案 2 :(得分:0)

编辑:好的抱歉,我误解了你的问题,发现你需要两次调用showWindow。我没有答案。

您看到的行为是正确的,因为方法initWithWindowNibName:实际上不会加载笔尖。 Nib加载发生在lazily ..所以在你调用showWindow方法或其他需要加载nib的window方法之后。