(Cocoa Mac)NSWindowController showWindow分配/初始化一个新的NSWindowController?

时间:2013-10-07 23:12:35

标签: objective-c macos cocoa showwindow

我有一个扩展NSWindowController的类BrowserWindowController。我的app delegate有一个BrowserWindowController,它在应用程序启动时分配,初始化和指向实例变量。然后,它显示其窗口。目标是从NIB出现一个窗口。

但是,我使用的代码最终会分配两个BrowserWindowControllers并初始化它们。我在调用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因任何原因创建的控制器的指针?

2 个答案:

答案 0 :(得分:2)

您是否检查了这样的情况并尝试?

if !(browser)
{
browser = [[BrowserWindowController alloc] initWithWindowNibName:@"BrowserWindow"]; //this calls initWithWindow as expected
[browser showWindow:nil];
}

答案 1 :(得分:0)

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

所以我重新命名了它,它现在有效。谢天谢地......我正在用这个问题撕掉我的头发。