1

ここで何が起こっているのかわかりません。AppDelegate で以下のアクションに接続されたボタンがあります。

- (IBAction)openWindow:(id)sender {
    self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"];
}

ボタンをクリックしても(予想どおり)何も起こりませんが、コードを(追加NSLog())に変更すると

- (IBAction)openWindow:(id)sender {
    self.winCon = [[NSWindowController alloc] initWithWindowNibName:@"NewWindow"];
    NSLog(@"%@",self.winCon.window);
}

「NewWindow」のウィンドウがポップアップします。なぜこれが起こるのですか?また、コンソールに NSLog が出力(null)されます。

(「NewWindow」xib では、ファイルの所有者は NSObject であり、ウィンドウ参照を配線していません。そのため、ログが印刷されることを期待していましたnullが、表示されているウィンドウは驚きでした)

別のこと、私が使用するとき:

- (IBAction)openWindow:(id)sender {
    [NSBundle loadNibNamed:@"NewWindow" owner:self.winCon];
}

ボタンをクリックすると、ウィンドウが表示されます。なぜこれが起こるのですか?nib をロードせず、ウィンドウで区切られたプロセスを表示しています。ウィンドウを表示するためにshowWindow:orを呼び出すべきではありませんか?makeKeyAndOrderFront:

ウィンドウプログラミングガイドで特定のアップルドキュメントを読んだとき:

ウィンドウを開く (つまり、ウィンドウを表示する) には、通常、NSWindow などで makeKeyAndOrderFront:、orderFront: などのメソッドのいずれかを呼び出して、アプリケーションのウィンドウ リストにウィンドウを配置します。また、Interface Builder で特定のビットが設定されていると、nib ファイルをロードしたときにウィンドウが表示される場合があります。

loadNibNamed:..これが窓を開ける理由だと思います。しかし、これらの「Interface Builder で設定されたビット」とは何ですか。これに関する情報はどこで入手できますか? (また、ウィンドウの「起動時に表示」プロパティのチェックを外すと、上記のケースでウィンドウが開かないようにすることができました-このプロパティが何をするかについてもう少し説明があれば助かります。)ありがとう。

注: NSWindowController サブクラスを使用して nib を初期化し、xib で適切に配線する方法は知っていますが、上記の動作に興味があります。

4

1 に答える 1