0

NSDocument推奨/NSWindowControllerセットアップのドキュメントベースのアプリがあります。すべてのウィンドウには、独自のNSWindowControllerインスタンスと関連する XIB ファイルがあります。インターフェイスは : に非常に簡単にロードされ-(id)initますif (self = [super initWithWindowNibName:@"DocumentWindow"]) { // yadda yadda }。XIB ファイルには、ユーザーが新しいウィンドウを開くたびにインスタンス化する必要がある別のコントローラーを表すオブジェクトが含まれています。現在のドキュメントにのみ関連するデータが表示されます。でオブジェクトをアンパックすると、-(id)initWithWindowNibName:2 つの異なるウィンドウ コントローラーがあり、2 回呼び出したにもかかわらず、常に同じインスタンスへの参照が取得されます-(id)initWithWindowNibName:。XIB ロード メカニズムは、同じアーカイブ オブジェクトを 1 回だけ展開するように見えますが、これは理にかなっています (本当に? )。

コードで個別のオブジェクトを割り当て、ビューを手動で読み込み、サイズを計算し、サブビューとして追加してから、バインディングを設定し、ウィンドウが閉じられたときに手動でバインドを解除することを監視する以外に方法はありませんか?

自分の愚かさのせいで、頭を壁にぶつけています。それは事態を悪化させるだけです。

4

1 に答える 1

1

私が最初に思ったように、私は絶対に間違った道を進んでいました。問題は、アプリケーションのサブビューであるオブジェクトの前述のインスタンス化されたクラスに通知を登録したことだけでしたkeyWindow(一緒にハックして、後でプロパティに変更したかったouch )。アプリケーションが読み込まれると、すべてのドキュメント ウィンドウにすべてのインスタンスが登録され、それらすべてに通知が送られ、同じデータが計算されました。

デバッガーは、今日の私の親友です。

実際、XIB からオブジェクトをアンアーカイブすると、最適化のようなものは何もなく、常に異なるインスタンスが得られます (振り返ってみると、これはまったく理にかなっています)。同様の問題が発生した場合は、おそらくコード内の別の場所に関連のないバグです。

于 2013-01-18T20:55:09.907 に答える