我正在學習如何使用Cocoa/Objective-C創建osx應用程序。我正在寫一個簡單的應用程序,它將鏈接兩個不同的教程,我一直在經歷。在啓動時使用2個按鈕加載選擇窗口,一個按鈕加載一個窗口,另一個加載另一個窗口。當任一按鈕被點擊時,選擇窗口關閉。在可可應用程序中打開另一個窗口的窗口的最佳設計模式
選擇窗口控制器對象已添加到MainMenu.xib文件,因此它在啓動時創建。然後使用awakeFromNib消息打開該窗口。
我想要一個按鈕的結果從ADC網站打開'軌跡控制器'教程應用程序。動作看起來是這樣的:
- (IBAction)trackButton:(id)sender {
TMTrackController *trackController = [[TMTrackController alloc] init];
[self.window close];
}
我添加了一個init方法的TMTrackController類看起來是這樣的:
- (id) init {
if (self = [super init]) {
[self showWindow];
TMTrack *myTrack = [[TMTrack alloc] init];
myTrack.volume = 50;
self.track = myTrack;
[self updateUserInterface];
return self;
}
else {
return nil;
}
}
- (void) showWindow {
if(!self.window) {
[NSBundle loadNibNamed:@"trackWindow" owner:self];
}
[self.window makeKeyAndOrderFront:self];
}
我不知道這是最好的方式來這樣做,因爲我知道choiceController類在關閉時將被釋放,從而擺脫了TMTrackController類。然而,即使當我解開ChoiceWindow.xib中的'release when closed'時,它也會中斷。
這樣做的正確方法是什麼?
你把這個代碼放在哪裏?在我的例子中,choiceWindowController創建了新窗口,但在這裏我假設這是其他地方。 – Ferguzz
在我的應用程序中,我把它放在一個NSObject中,並作爲一個IBAction('test = ['part) – 2012-06-14 14:08:55
我的意思是,這是在一個視圖控制器類或什麼?如果是這樣,哪一個,以及當創建它的類被釋放時如何停止'test'對象的釋放?我無法想象將視圖控制器對象保留在內存中是一種很好的做法,因爲它沒有控制權來保存另一個視圖控制器! – Ferguzz