私はNSImageViewを含むNSWindowを持っています。このウィンドウは、テーブルビュー内のセルをクリックするたびにアクティブになります。私はNSWindowのインスタンスを1つだけ表示したいだけですが、NSImageViewの内容を変更できるようにしたいと考えています。どのようにウィンドウがココアで一度だけ表示されることを確認できますか?
NSWindowを初期化してインスタンスを1つだけ表示するにはどうすればよいですか?
私はNSImageViewを含むNSWindowを持っています。このウィンドウは、テーブルビュー内のセルをクリックするたびにアクティブになります。私はNSWindowのインスタンスを1つだけ表示したいだけですが、NSImageViewの内容を変更できるようにしたいと考えています。どのようにウィンドウがココアで一度だけ表示されることを確認できますか?
NSWindowを初期化してインスタンスを1つだけ表示するにはどうすればよいですか?
一つの可能性はNSWindowControllerのサブクラスと窓コントローラがインスタンス化されたときにロードされる関連付けられたウィンドウXIBを作成することです。
NSTableViewでマウスクリックを処理しているコントローラクラスが既にあると思います。そのクラスでは、上で述べたNSWindowControllerサブクラスのインスタンスをインスタンス変数として保持するだけです。ウィンドウを表示する必要があるときはいつも、そのウィンドウを表示するようにivarに指示します。
クリックした表のセルにウィンドウの内容が依存する場合は、そのウィンドウの内容を変更するいくつかのメソッドをウィンドウコントローラに追加し、そのウィンドウを表示する前にクリック処理メソッドでこれらのメソッドを呼び出します。
btw:ここではシングルトンを使用しません。この場合は、悪い設計(ちょっと意見がありますが、難しい事実ではない)の回避策になるからです。
なぜシングルトン、悪いデザインですか? –
私の意見では、シングルトンはここでは悪いです。なぜなら、表示されるNSWindowを1つだけ持つことができる本当の理由がないからです。おそらくあなたのUIはそのように機能するが、道のりのどこかにいるので、同時に表示される第2のウィンドウを使用したい場合があるかもしれない。シングルトンを使用する場合、それはかなり書き直されますが、いくつかのインスタンスを渡すだけで(アプリケーション全体でインスタンスが1つしかない場合)、2つ目のウィンドウが必要な場合はコードが準備できます。 –
一方、あなたのアプリが一度しか存在できない通信チャンネル(例えば、単一のシリアルポートのようなもの)のような限られた固定リソースを使用している場合、それはシングルトンの正当な場所かもしれません(ただし、 tは1でなければならない)。 –