Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c (Cocoa Mac)NSWindowController showWindow是否分配/初始化新的NSWindowController?_Objective C_Macos_Cocoa_Showwindow - Fatal编程技术网

Objective c (Cocoa Mac)NSWindowController showWindow是否分配/初始化新的NSWindowController?

Objective c (Cocoa Mac)NSWindowController showWindow是否分配/初始化新的NSWindowController?,objective-c,macos,cocoa,showwindow,Objective C,Macos,Cocoa,Showwindow,我有一个扩展NSWindowController的BrowserWindowController类。我的应用程序委托有一个BrowserWindowController,它在应用程序启动时分配、初始化并指向实例变量。然后,它显示其窗口。目标是显示一个来自NIB的窗口 然而,我正在使用的代码最终分配了两个BrowserWindowController并初始化了这两个控制器。我使用调试器跟踪何时调用BWC的initWithWindow方法: browser = [[BrowserWindowCont

我有一个扩展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出于任何原因创建的控制器的指针吗?

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

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

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


所以我重新命名了它,它现在可以工作了。谢天谢地。。。这个问题让我头痛不已。

我刚才试过,if条件满足。在我的示例代码的第一行之前,它肯定是未分配的。你知道,当我调用showWindow时,它会经历许多内置的nib加载方法调用。也许在我的xib文件中的某个地方我必须更改一些东西?所以我在仪器中进行了测试,它说额外的BrowserWindowController分配的负责库是AppKit。还有一件事,为什么在这里使用nil而不是在showWindow参数中使用self???@hussainShabbir?我觉得没关系。不管怎样,我试着把self放进去,但没能解决问题。我的应用程序委托实际上没有与窗口的任何连接,只是我希望委托制作一个窗口控制器,并在应用程序启动时打开该窗口。您是否碰巧将应用程序委托作为多个nib文件中的xib顶级对象(蓝色立方体)?