2012-06-14 47 views
0

我正在學習如何使用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'時,它也會中斷。

這樣做的正確方法是什麼?

回答

0

在同一個項目中使用廈門國際銀行S:

@interface  

@property (strong) NSWindowController *test; 

@implementation 

@synthesize test; 

    test = [[NSWindowController alloc] initWithWindowNibName:@"XIB NAME HERE"]; 
    [test showWindow:self]; 
    [home close]; 
+0

你把這個代碼放在哪裏?在我的例子中,choiceWindowController創建了新窗口,但在這裏我假設這是其他地方。 – Ferguzz

+0

在我的應用程序中,我把它放在一個NSObject中,並作爲一個IBAction('test = ['part) – 2012-06-14 14:08:55

+0

我的意思是,這是在一個視圖控制器類或什麼?如果是這樣,哪一個,以及當創建它的類被釋放時如何停止'test'對象的釋放?我無法想象將視圖控制器對象保留在內存中是一種很好的做法,因爲它沒有控制權來保存另一個視圖控制器! – Ferguzz

0

這是不完全一樣的,但,這是我對這些問題的解決方案:Stackoverflow

不理會我在這個答案就顯示的聲明窗口作爲模態窗口。其他一切仍然有效。這樣你可以擁有你的個人窗口控制器,並且它可以控制xib中的所有內容。這對於之後維護項目來說是一個巨大的優勢(並且您保持應用程序邏輯)。

相關問題