0

Cocoa/Objective-C を使用して osx アプリケーションを作成する方法を学んでいます。私が経験してきた2つの異なるチュートリアルをリンクする簡単なアプリを書いています。起動時に選択ウィンドウが 2 つのボタンで読み込まれます。1 つのボタンで 1 つのウィンドウが読み込まれ、もう 1 つのボタンでもう 1 つのウィンドウが読み込まれます。いずれかのボタンをクリックすると、選択ウィンドウが閉じます。

選択ウィンドウ コントローラー オブジェクトが MainMenu.xib ファイルに追加されたため、起動時に作成されます。ウィンドウは、awakeFromNib メッセージを使用して開かれます。

1 つのボタンの結果で、ADC Web サイトから「トラック コントローラー」チュートリアル アプリケーションを開くことができます。アクションは次のようになります。

- (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 の「閉じたときに解放する」ボックスのチェックを外しても、壊れます。

これを行う正しい方法は何ですか?

4

2 に答える 2

0

完全に同じではありませんが、これはそのような問題に対する私の解決策です: Stackoverflow

ウィンドウをモーダルウィンドウとして表示することに関するこの回答の私の声明は無視してください。他のすべてはまだ有効です。このようにして、個人用のウィンドウ コントローラーを持つことができ、それが xib 内にあるすべてのものを制御します。これは、後でプロジェクトを維持するための大きな利点です (そして、アプリケーション ロジックを維持できます)。

于 2012-06-14T08:48:41.850 に答える
0

同じプロジェクトで xib を使用する場合:

@interface    

@property (strong) NSWindowController *test;

@implementation

@synthesize test; 

    test = [[NSWindowController alloc] initWithWindowNibName:@"XIB NAME HERE"];
    [test showWindow:self];
    [home close];
于 2012-06-14T00:42:58.207 に答える