2009-10-07 71 views
3

我有一個NSWindowController的子類,用於從筆尖加載窗口並將其顯示在屏幕上。下面是我想要顯示窗口時調用的代碼。在調用showCustomWindow時,在10.6上顯示窗口,但在10.5上,必須調用兩次該方法才能顯示窗口。爲什麼我必須在10.5上的NSWindowController上調用showWindow兩次?

-(IBAction)showCustomWindow:(id)sender 
{ 
    if(!windowController){ 
     windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow"]; 
    } 

    [windowController showWindow:self]; 
} 

該窗口的「Visible at Launch」選中並取消選中它似乎沒有什麼區別。

編輯:我意識到我遇到的問題與我的NSWindowController或showWindow沒有關係。我的設置正確。但是我發現並不是所有的類都實現了awakeFromNib。在我的一個NSView子類中(在筆尖中,我試圖加載),我打電話給[super awakeFromNib],它給了我一個「不響應選擇器」(但只在10.5這很奇怪)。所以,我可以只取出[超級awakeFromNib]但我選擇了希望更穩健:

if([NSView instancesRespondToSelector:@selector(awakeFromNib)]) { 
    [super awakeFromNib]; 
} 

這讓我的筆尖常和的ShowWindow負載正常工作。

+3

該文檔如下所示:「只有在確定您的超類提供了實現時,才應該調用awakeFromNib的超級實現。因爲Application Kit沒有提供awakeFromNib方法的默認實現,因此將super結果如果父類沒有實現它,則會出現異常,其直接父類爲NSObject或NSView的類不需要調用超級實現。「換句話說,如果它只是一個NSView子類,請不要打擾它。 – 2009-12-28 22:32:41

回答

0

您是否在窗口從其筆尖加載完成之前調用了-showWindow?你可能想在[MyWindowController awakeFromNib]中設置一個斷點來查明。

0

編輯:好對不起,我誤解了你的問題,並看到你需要調用showWindow兩次。我沒有答案。

您看到的行爲是正確的,因爲方法initWithWindowNibName:實際上不會加載筆尖。筆尖加載發生在懶惰......所以在您調用showWindow方法或其他方法(如window)需要加載筆尖之後。

4

如果您想使用-showWindow:來控制該窗口的可見性時間,應該取消選中啓動時可見。

其他的一切似乎從你已經證明我們所以這只是一個猜測,但你忘了給window出口你的文件的所有者對象上連接到你的筆尖的窗口?

相關問題