ドキュメントベースのアプリを開発しています。各ドキュメントには 3 つのウィンドウ (したがって 3 つのウィンドウ コントローラー) があります。3 つのウィンドウのうち 2 つが、開いているさまざまなドキュメント間で共有されるように設定したいと思います (必要に応じてビューを交換します)。これは可能ですか?誰かが私を正しい方向に向けることができますか (ドキュメントまたは例)?
ありがとう!
ドキュメントベースのアプリを開発しています。各ドキュメントには 3 つのウィンドウ (したがって 3 つのウィンドウ コントローラー) があります。3 つのウィンドウのうち 2 つが、開いているさまざまなドキュメント間で共有されるように設定したいと思います (必要に応じてビューを交換します)。これは可能ですか?誰かが私を正しい方向に向けることができますか (ドキュメントまたは例)?
ありがとう!
その場合、これらの共有ウィンドウ コントローラーはどのドキュメントにも所有されるべきではありません (各ドキュメントには「共有」ウィンドウの独自のペアがあるため)。インスペクターのように、ウィンドウ パネルを作成することもできます。
新しいメイン ウィンドウには別のドキュメントが含まれている可能性があるため、各コントローラーでどのウィンドウがメインであるかを追跡し、メイン ウィンドウが変更されたときにそれに応じてウィンドウを更新する必要があります。
Inspector ウィンドウの作成方法に関するほとんどすべてのチュートリアルがここで役に立ちます。
可能ですが、あなたの側からは取るに足らない量の作業が必要になります。要約すると、これがあなたがする必要があることです:
setDocument:
ウィンドウコントローラでオーバーライドし、各ドキュメントへの関連付けを維持します。NSWindowController
)がドキュメントとの関連付けを解除していることを確認してください。ウィンドウ内のビューを処理している可能性のある各ビューコントローラについても同じことが言えます。NSDocumentController
ドキュメントのクローズを処理して、ドキュメントを閉じる前にマルチドキュメントウィンドウがドキュメントから切り離されていることを確認します。はシングルトンであるため、デフォルトのインスタンスを置き換えるためにファイルにNSDocumentController
インスタンスを追加する必要があります。MainMenu.xib
マルチドキュメントウィンドウコントローラーのサポートを追加する方法については、こちらのステップバイステップガイドをご覧ください。
-makeWindowControllers
サブクラスでオーバーライドして必要なコントローラーを作成し、NSDocument サブクラスをNSDocument
呼び出して共有ウィンドウ コントローラーを追加する必要があるようです。-addWindowController:
まだこれを行う必要はありませんが、これらは私が検討している方法です。
Apple の NSDocument クラス リファレンスから:
makeWindowControllers
サブクラスは、このメソッドをオーバーライドして、ドキュメントの初期ウィンドウ コントローラーを作成できます。
- (void)makeWindowControllers
討論
基本クラスの実装は、windowNibName を使用して NSWindowController オブジェクトを作成し、windowNibName が名前を返す場合はドキュメントをファイルの所有者として作成します。このメソッドをオーバーライドして独自のウィンドウ コントローラーを作成する場合は、必ず addWindowController: を使用して、作成後にそれらをドキュメントに追加してください。
このメソッドは NSDocumentController の open... メソッドによって呼び出されますが、場合によっては直接呼び出すこともできます。