0

我有一个扩展 NSWindowController 的类 BrowserWindowController。我的应用程序委托有一个 BrowserWindowController,它在应用程序启动时分配、初始化和指向一个实例变量。然后,它显示它的窗口。目标是显示来自 NIB 的窗口。

但是,我使用的代码最终分配了两个 BrowserWindowController 并初始化了两者。当 BWC 的 initWithWindow 方法被调用时,我已经使用调试器来追踪:

browser = [[BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"]; //this calls initWithWindow as expected
[browser showWindow:nil]; //this allocates ANOTHER BWC and calls initWithWindow on it!

showWindow 正在制作一个新的 BrowserWindowController。我不知道它指向的新对象是什么。这对我来说是个大问题。有什么办法可以解决这个问题或使用不同的方法使窗口显示?或者我至少可以得到一个指向 showWindow 出于某种原因创建的控制器的指针吗?

4

2 回答 2

2

您是否检查过这样的条件并尝试过?

if !(browser)
{
browser = [[BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"]; //this calls initWithWindow as expected
[browser showWindow:nil];
}
于 2013-10-08T04:18:46.190 回答
0

有史以来最糟糕的解决方案。问题是我的控制器中有一个名为“owner”的属性,它是一个 NSString。NSWindowController 已经有一个“所有者”属性,我忽略了它。不知何故,这导致 NIB 加载器创建了第二个没有可访问指针的控制器,并做了一些其他奇怪的事情。

所以我重命名了它,它现在可以工作了。谢天谢地......我正在为这个问题撕毁我的头发。

于 2013-10-10T02:50:26.773 回答