嘿,伙计们,我以为这会是一件非常简单的事情,但事实证明它比我想象的要棘手。
我希望能够显示一个NSPanel,它显示一个圆形进度条和正在处理的事物的名称。
因此,我在IB中创建了一个包含这些控件的NSPanel,然后创建了NSWindowController的一个子类。为控制创建了出口,并将它们联系起来。
但是,当我尝试使用此代码显示NSPanel时,什么也没有发生:
[[[self controller] msgSubject] setValue:[msg subject]];
[[[self controller] window] setLevel:NSFloatingWindowLevel];
[[self controller] showWindow:self];
[[[self controller] window] makeKeyAndOrderFront:self];self控制器是一种延迟实例化NSWindowController子类的方法。我尝试添加对makeKeyAndOrderFront:的调用,但没有成功,但面板仍然没有弹出。
我尝试了调试,我发现当调用-initWithWindow:时,作为参数传入的NSWindow将实例变量全部置零,这让我相信这里发生了某种IB链接问题。
有什么想法吗?我猜我遗漏了一些非常明显的东西,但我无论如何也搞不清楚它是什么。
发布于 2011-03-05 03:34:20
请发布自控制器方法的内容,这样我们就可以开始确切地了解您是如何创建和使用NSWindowController子类的。您是直接使用initWithWindow:方法创建它,还是从其他初始化方法中间接调用该方法(这是指定的初始化器)?如果你直接调用它,这对我来说没有什么意义,因为你说过你已经在nib文件中创建了这个窗口。另一方面,如果它是由-initWithWindowNibName:间接调用的,那么它将有助于查看该代码。
NSWindowController主要以两种不同的方式使用/设置。一种方法是以编程方式创建一个NSWindow,然后创建NSWindowController子类,并将该窗口作为控制器将要管理的窗口提供给控制器。第二种方法,也是更常用的方法,是创建一个包含窗口的nib文件,这听起来就是您想要做的。在此方法中,通常使用-initWithWindowNibName:初始值设定项。只要传入正确的nib名称(通常不包括文件名中的".nib“部分),并且可以在运行时正确地找到该nib文件,并且将该nib文件中的文件所有者设置为自定义的NSWindowController子类,并且将该子类的window出口正确地连接到您的窗口,那么您就应该完成了所有的设置。
可能需要仔细检查,以确保您想要加载的nib文件确实在应用程序包中。(我偶尔会忘记将其添加到目标中,因此在运行时无法定位nib文件,因此-initWithWindow:方法将始终显示nil参数)。
https://stackoverflow.com/questions/5198009
复制相似问题