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