3

我有一个 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 上,这很奇怪)。所以,我本可以取出 [super awakeFromNib] 但我选择了希望更强大的:

if([NSView instancesRespondToSelector:@selector(awakeFromNib)]) {
    [super awakeFromNib];
}

这使我的笔尖可以正常加载,并且 showWindow 可以正常工作。

4

3 回答 3

4

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

从您向我们展示的内容来看,其他所有内容似乎window都是正确的,所以这只是一个猜测,但是您是否忘记将File's Owner 对象上的插座连接到 nib 中的窗口?

于 2009-10-07T18:12:26.067 回答
0

编辑:好的对不起,我误解了你的问题,看到你需要调用 showWindow 两次。我对此没有答案。

您看到的行为是正确的,因为该方法initWithWindowNibName:实际上不会加载笔尖。笔尖加载延迟发生..所以在您调用该showWindow方法或其他一些方法(例如window,需要加载笔尖)之后。

于 2009-10-07T07:51:19.367 回答
0

您是否在窗口完成从其笔尖加载之前调用 -showWindow ?你可能想在 [MyWindowController awakeFromNib] 中设置一个断点来找出答案。

于 2009-10-07T06:51:25.000 回答