【发布时间】:2013-10-07 23:12:35
【问题描述】:
我有一个扩展 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 出于某种原因创建的控制器的指针吗?
【问题讨论】:
-
你知道,当我调用showWindow时,它会经历很多内置的nib加载方法调用。也许在我的 xib 文件的某个地方我必须改变一些东西?
-
所以我在 Instruments 中进行了测试,它说额外的 BrowserWindowController 分配的负责库是 AppKit。
-
还有一件事,你为什么在这里使用 nil,尽管使用了 self??
-
@hussainShabbir 你的意思是在 showWindow 参数中?我以为没关系。无论如何,我尝试将 self 放入,但它并没有解决问题。我的应用委托实际上与窗口没有任何连接,只是我希望委托制作一个窗口控制器并在应用启动时打开该窗口。
-
您是否碰巧在多个 nib 文件中将应用程序委托作为 xib 顶级对象(蓝色立方体)?
标签: objective-c macos cocoa showwindow