框架和XIB

时间:2011-02-22 16:09:22

标签: objective-c cocoa nswindow

我在框架中面临一个关于XIB文件的奇怪问题。此XIB文件包含NSWindowNSTableView和两个按钮,所有这些按钮都通过Outlet连接。 TableView和Buttons按预期工作,但NSWindow始终为(null)

窗口的插座已连接 XIB正在正确加载,所以我真的很惊讶这对于此特定实例不起作用。

我像这样加载XIB:BOOL success = [NSBundle loadNibNamed:@"SomeXIB" owner:self];

然后我尝试修改窗口:

[window setLevel:NSModalPanelWindowLevel];
[window center];
[window makeKeyAndOrderFront:self];

NSLog(@"Window: %@",window);

NSLog语句始终返回(null),并且上述方法都不执行任何操作,窗口仅显示,因为Visible At Launch已被选中,否则不会。 (证明XIB装得很好)

我错过了什么吗?

编辑:

以下是我对窗户所做的一切:

BOOL success = [NSBundle loadNibNamed:@"BrowserPrompt" owner:self];

if (success == NO)  
{
    NSLog(@"Couldn't load XIB.");
    return NO;
}

[[self delegate] pickerWillShow:self];  

[window setLevel:NSModalPanelWindowLevel];
[window center];
[window makeKeyAndOrderFront:self];

1 个答案:

答案 0 :(得分:1)

几乎可以肯定,以下之一是真的:

  • self.window不是IBOutlet
  • 您的XIB文件所有者与self
  • 属于同一类
  • 您尚未将IB中的NSWindow与文件所有者的window IBOutlet相关联。
  • 您在加载和使用之间设置windownil
  • 您正在加载代码之前运行窗口修改代码(这个错误非常常见)。

覆盖setWindow:以便您可以输入日志记录或断点,并确保它被调用,并检查是否使用nil或正确的值调用它。