2011-03-04 99 views
0

嘿傢伙, 我認爲這將是一件非常簡單的事情,但事實證明比我想象的要複雜。按需顯示NSPanel - NSPanel沒有顯示?

我希望能夠顯示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]; 

[自控制器]是懶惰地實例化NSWindowController子類的方法。我嘗試添加對makeKeyAndOrderFront的調用:徒勞,但面板仍然沒有彈出。

我試過調試,我發現當調用-initWithWindow:時,作爲參數傳入的NSWindow已全部清零實例變量,導致我相信這裏會出現某種IB鏈接問題。

任何想法?我猜我錯過了一些非常明顯的事情,但我不能爲了我的生活而弄清楚它是什麼。

回答

0

請發佈[自我控制器]方法的內容,以便我們可以開始詳細瞭解如何創建和使用NSWindowController子類。您是直接使用initWithWindow:方法創建它,還是從其他init方法之一間接調用該方法(它是指定的初始化程序)?如果你直接調用它,那對我來說沒有意義,因爲你說你已經在nib文件本身創建了窗口。如果另一方面,它被-initWithWindowNibName:間接調用,那麼它將有助於查看該代碼。

NSWindowController的主要使用/設置有兩種不同的方式。一種方法是以編程方式創建NSWindow,然後創建NSWindowController子類,並將該窗口作爲控制器將管理的窗口輸入。第二種,也是比較常用的方法,是創建一個容納窗口的nib文件,這聽起來就像你正在做的那樣。在這種方法中,您通常使用-initWithWindowNibName:初始值設定項。只要您傳遞正確的nib名稱(通常不帶文件名的「.nib」部分),並且可以在運行時正確找到該nib文件,並且該nib文件中的文件所有者被設置爲自定義NSWindowController子類和這個子類的出口正確地連接到你的窗口,那麼你應該全部設置。

可能要仔細檢查以確保要加載的nib文件實際上位於應用程序包中。 (我偶爾忘記將它添加到目標中,因此在運行時無法找到nib文件,因此-initWithWindow:方法總是會顯示一個零參數)。

+0

我認爲問題在[自我控制器]內,因爲我沒有調用-initWithWindowNibName :.出於某種原因,我認爲筆尖文件魔術般地將自己與控制器綁定在一起,但似乎並非如此。 (UnsubProgViewController *)控制器如果(!controller)controller = [[UnsubProgViewController alloc] init]; 迴歸控制器; }' 而......它就是這樣!謝謝! – Aaron 2011-03-04 20:21:23