3

ペン先からウィンドウをロードして画面に表示するために使用している NSWindowController のサブクラスがあります。以下は、ウィンドウを表示したいときに呼び出されるコードです。10.6 では showCustomWindow が呼び出されるとウィンドウが表示されますが、10.5 ではウィンドウを表示するためにこのメソッドを 2 回呼び出す必要があります。

-(IBAction)showCustomWindow:(id)sender 
{
   if(!windowController){
       windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindow"];
    }

    [windowController showWindow:self];
}

ウィンドウには「起動時に表示」がチェックされており、チェックを外しても違いはないようです。

編集:私が抱えていた問題は、NSWindowController または showWindow に関連していないことに気付きました。私はそれを正しく設定しました。ただし、すべてのクラスがawakeFromNibを実装しているわけではないことがわかりました。私のNSViewサブクラスの1つ(ロードしようとしていたペン先にありました)で、[super awakeFromNib]を呼び出していましたが、「セレクターに応答しません」というメッセージが表示されました(ただし、10.5でのみ奇妙です)。したがって、[super awakeFromNib] を取り出すこともできましたが、できればより堅牢なものを選択しました。

if([NSView instancesRespondToSelector:@selector(awakeFromNib)]) {
    [super awakeFromNib];
}

これにより、ペン先が正常にロードされ、showWindow が適切に動作するようになりました。

4

3 に答える 3

4

-showWindow:そのウィンドウの表示のタイミングを制御するために使用する場合は、[起動時に表示]をオフにする必要があります。

他のすべてはあなたが私たちに示したものから正しいように見えるので、これは単なる推測ですがwindow、ファイルの所有者オブジェクトのアウトレットをペン先のウィンドウに接続するのを忘れましたか?

于 2009-10-07T18:12:26.067 に答える
0

ウィンドウがペン先からのロードを完了する前に -showWindow を呼び出していますか? [MyWindowController awakeFromNib] にブレークポイントを設定して確認することをお勧めします。

于 2009-10-07T06:51:25.000 に答える
0

編集: OK 申し訳ありませんが、質問を誤解しており、showWindow を 2 回呼び出す必要があることがわかりました。私はそれに対する答えを持っていません。

initWithWindowNibName:メソッドは実際にはペン先をロードしないため、表示されている動作は正しいです。Nib の読み込みは遅延して行われます..そのため、メソッドを呼び出した後、またはnib を読み込む必要があるshowWindowような他のメソッドを呼び出した後です。window

于 2009-10-07T07:51:19.367 に答える