我有一個簡單的Cocoa應用程序使用NSWindowController子類。在筆尖我已設置:NSWindowController windowDidLoad不叫
- 文件所有者的課我NSWindowController子類
- 文件的所有者的「窗口」出口到筆尖的主要NSWindow。
我的NSWindowController子類的init方法被調用(我叫超級),但不管我做什麼windowDidLoad永遠不會被調用。
我必須錯過一些明顯的東西,但對於我的生活,我無法弄清楚它是什麼。
我有一個簡單的Cocoa應用程序使用NSWindowController子類。在筆尖我已設置:NSWindowController windowDidLoad不叫
我的NSWindowController子類的init方法被調用(我叫超級),但不管我做什麼windowDidLoad永遠不會被調用。
我必須錯過一些明顯的東西,但對於我的生活,我無法弄清楚它是什麼。
您正試圖通過在另一個nib中實例化它來創建NSWindowController
的實例。但是,當您在nib文件中實例化對象時,它將通過調用-initWithCoder:
進行初始化。
-initWithCoder:
不是NSWindowController
的指定初始值設定項,所以您的NSWindowController
實例永遠不會加載它的筆尖。
而是通過將其放置在MainMenu.xib
文件在Interface Builder中實例化的NSWindowController
實例,編程創建:
在AppDelegate.h:
@class YourWindowController;
@interface AppDelegate : NSObject
{
YourWindowController* winController;
}
@end
在AppDelegate.m:
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
winController = [[YourWindowController alloc] init];
[winController showWindow:self];
}
- (void)dealloc
{
[winController release];
[super dealloc];
}
@end
YourWindowController.m:
@implementation YourWindowController
- (id)init
{
self=[super initWithWindowNibName:@"YourWindowNibName"];
if(self)
{
//perform any initializations
}
return self;
}
@end
謝謝!感謝幫助。 – 2010-04-24 18:52:45
該窗口可能按需加載 - 請嘗試通過-init
向您自己發送window
。有關更多信息,請參見the discussion of -[NSWindowController loadWindow]
in the documentation。
剛剛嘗試過這一點 - [自我窗口]在初始化過程中爲null(即使調用超級後)。我會繼續挖掘。 – 2010-04-23 02:03:46
這是完全正常的通過筆尖實例窗口控制器。而不是使用windowDidLoad
作爲你的掛鉤,在這種情況下,你會想要使用awakeFromNib
。
優秀!謝謝。 – ArtOfWarfare 2013-05-05 06:02:24
如果你寫
TTEst *test3 = (TTEst *)[[NSWindowController alloc] initWithWindowNibName:@"TTEst"];
嘗試,而不是
TTEst *test3 = [[TTEst alloc] initWithWindowNibName:@"TTEst"];
它所產生的不同!當然,第一行是一個錯誤...
你是如何初始化類的?你是否調用super的'-initWithWindowNibName:'實現? – 2010-04-23 02:09:37
我的NSWindowController子類在nib中實例化,就像這個doc討論的那樣:http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjCTutorial/06Controller/06Controller.html#//apple_ref/doc/ uid/TP40000863-CH8-SW1 基本上,MainMenu.xib創建它 – 2010-04-23 02:14:47
我面臨類似的問題:我沒有調用' - (void)windowDidLoad'。經過一番挖掘,我發現我的錯誤在我的NSWindowController子類中聲明'window'屬性。我刪除了該成員並調用了'showWindow:'方法來成功獲得窗口。 – Raviprakash 2011-04-13 06:48:12