框架与厦门国际银行

发布于 2024-10-18 17:45:00 字数 1044 浏览 2 评论 0原文

我在我的框架中面临一个关于 XIB 文件的奇怪问题。该 XIB 文件包含一个 NSWindowNSTableView 和两个按钮,所有这些按钮都通过 Outlet 连接。 TableView 和 Button 按预期工作,但 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];

I'm facing a strange problem concerning a XIB file in my framework. This XIB file contains a NSWindow, NSTableView and two buttons, all of which are connected via Outlets. The TableView and Buttons work as expected, but the NSWindow is always (null).

The window's outlet is connected and the XIB is being loaded correctly, so I'm really surprised that this doesn't work for this particular instance.

I load the XIB like this: BOOL success = [NSBundle loadNibNamed:@"SomeXIB" owner:self];

Then I try to modify the window:

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

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

The NSLog statement always returns (null) and none of the methods above do anything, the window only shows up because Visible At Launch is checked and won't otherwise. (which proves that the XIB is loaded fine)

Am I missing something?

Edit:

Here's all I do to the window:

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];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

皇甫轩 2024-10-25 17:45:00

几乎可以肯定,以下情况之一是正确的:

  • self.window 不是 IBOutlet
  • 您的 XIB 的文件所有者与 self 不是同一类
  • 您还没有连接 NSWindow IB 到文件所有者的窗口 IBOutlet。
  • 您在加载和使用之间将 window 设置为 nil
  • 您在加载代码之前运行窗口修改代码(这个错误非常常见)。

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

Almost certainly, one of the following is true:

  • self.window is not an IBOutlet
  • Your XIB's File Owner is not of the same class as self
  • You have not connected the NSWindow in IB to the File Owner's window IBOutlet.
  • You are setting window to nil between the load and the usage.
  • You are running the window modifying code before the load code (this mistake is surprisingly common).

Override setWindow: so you can put in logging or a breakpoint, and make sure it's being called, and check whether it's being called with nil or a proper value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文