按需显示NSPanel - NSPanel没有显示?

时间:2011-03-04 18:53:07

标签: objective-c cocoa

嘿伙计们, 我认为这将是一件非常简单的事情,但事实证明这比我想象的更棘手。

我希望能够显示一个显示循环进度条的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 controller]是一种懒惰地实例化NSWindowController子类的方法。我尝试添加对makeKeyAndOrderFront的调用:徒劳,但面板仍然没有弹出。

我试过调试,我发现当调用-initWithWindow:时,作为参数传入的NSWindow都将实例变量归零,这让我相信这里有某种IB链接问题。

有什么想法吗?我猜我错过了一些非常明显的东西,但我不能为我的生活弄清楚它是什么。

1 个答案:

答案 0 :(得分:0)

请发布[自我控制器]方法的内容,以便我们开始准确了解您如何创建和使用NSWindowController子类。您是直接使用initWithWindow:方法创建它,还是从其他init方法间接调用该方法(指定的初始化程序)?如果你直接调用它,那对我来说没有任何意义,因为你说你已经在nib文件本身创建了窗口。另一方面,如果它被-initWithWindowNibName:间接调用,则有助于查看该代码。

NSWindowController主要以两种不同的方式使用/设置。一种方法是以编程方式创建NSWindow,然后创建NSWindowController子类并将该窗口作为控制器将管理的窗口提供。第二种也是比较常用的方法是创建一个包含窗口的nib文件,这听起来就像你想要做的那样。在此方法中,您通常使用-initWithWindowNibName:初始值设定项。只要传入正确的nib名称(通常没有文件名的“.nib”部分),并且可以在运行时正确找到该nib文件,并且此nib文件中的文件所有者被设置为自定义{ {1}}子类,并且此子类的NSWindowController出口已正确连接到您的窗口,然后您应该全部设置。

可能需要仔细检查以确保您要加载的nib文件实际位于应用程序包中。 (我偶尔会忘记将它添加到目标中,因此在运行时无法找到nib文件,因此window方法将始终显示nil参数。)