2011-07-11 6 views
3

keyWindowはいつ作成されますか?NSAppのkeyWindowはいつ作成されますか?

対応するビューコントローラのupdateViewメソッドが呼び出される前にNSWindowが作​​成されると思っていましたが、NSAppのkeyWindowを使用してアラートシートを作成すると正しく表示されません。

ただし、そのビューにボタンを置き、ユーザーがクリックしたときに警告を表示すると、keyWindowが定義され、警告が正しく表示されます(期待どおり)。

My Application Delegateはほぼ完全に空です。

起動時に実際に警告を表示する必要はありませんが、キーウィンドウがいつ設定されているかを知りたいと思います。 :)

答えて

4

いつキーウィンドウが作成されますか?典型的には、-makeKeyAndOrderFront:それを送信することによって、現在のキーウィンドウである既存のウィンドウ(既にnibファイルからロードされた例えばウィンドウ)に

-[NSApp keyWindow]ポイント。アプリケーションが起動し、ココア

  1. がメインnibファイルをロードします。
  2. nibファイルの内容をアーカイブ解除し、オブジェクトをインスタンス化します。
  3. nibファイルで定義された接続を再確立します。
  4. nibファイルオブジェクト(のサブセット)に-awakeFromNibを送信します。
  5. とマークされたウィンドウを表示します。起動時に表示されます;

Resource Programming Guideに記載されている。

nibファイルに1つのウィンドウが含まれている場合、そのウィンドウはキーウィンドウになることを条件に表示されるとキーとなり、の後に-awakeFromNibが送信されます。

また、the documentation for -[NSApplication keyWindow]は、と述べている:アプリケーションのnibファイルがまだロードが完了していない場合や、受信機がアクティブでない場合、このメソッドはnilを返すことがあります

+0

nibファイルには多くのウィンドウが含まれていますが、そのうちの1つのみがデフォルトで表示されますか? nibファイルの読み込みが完了したかどうかを知る必要なしに、他のコントローラがメインウィンドウまたはキーウィンドウを参照する方法を教えてください。 (私は今、それぞれのウィンドウコントローラーでwindowDidLoadイベントを使用しようとしていますが、それらは起動されていません)。 – Arafangion

+0

コメントの後半の質問は多かれ少なかれhttp://stackoverflow.com/questions/2695671/nswindowcontroller-windowdidload-not-calledであったので、元の質問にはうまく答えるため、回答を受け入れました。 – Arafangion

+0

@Ara NSApplicationとNSWindowは、これを調整するために使用できる通知を送信します。これらの通知を聞くことも、 'NSApplicationDelegate'と' NSWindowDelegate'の対応するメソッドを使うこともできます。たぶんこれは、あなたのアーキテクチャと意図された動作についての詳細な情報を含む別の質問を保証するかもしれません。 –

関連する問題