1

Interface Builder で setSelectsInsertedObjects を YES に設定して、NSUserDefaults コントローラーにバインドされた NSArrayController がありますが、[追加] をクリックすると、新しく追加されたオブジェクトが選択されるのではなく、以前に選択されていたオブジェクトが選択解除されます。

私は何が欠けていますか?

4

2 に答える 2

3

それらをどのようにバインドしていますか?NSArrayController の「コンテンツ」バインディングによるものであれば、selectionIndexes を同じオブジェクトにバインドしようとしていると思います。このクラス (NSIndexSet) は NSUserDefaults では機能しません (理由はわかりませんが、過去に同じ問題がありました。オブジェクトのライフサイクルと関係があると思います。空として初期化されてからインデックスが追加されます)。か何か)。setSelectsInsertedObjects が行っているのは、新しいオブジェクトが追加されたときに selectionIndexes を自動的に更新するだけであり、基本的に NSUserDefaults コントローラーがそれを台無しにしています。どこにあるかはわかりませんが、NSArrayController のバインディングを探し回ると、自動的に NSUserDefaults にバインドされた selectionIndexes (または関連するもの) のバインディングが見つかると思います。チェックを外すと、

于 2010-03-16T03:25:20.330 に答える
1

selectsInsertedObjects私が理解しているように、それはほとんど意味があります。ユーザーが新しいアイテムを追加すると、以前の選択が置き換えられて新しいアイテムが選択されます。

別の動作が必要な場合は、NSArrayControllerを拡張するか、NSArrayControllerをデリゲートとして使用する独自のコントローラークラスを作成できますNSProxy。私はあなたがオーバーライドadd:する必要があると信じています:

  1. 現在の選択を保存します
  2. 親に電話するadd:
  3. 現在の選択を保存された選択とマージします
  4. 選択範囲をマージされた選択範囲に設定します

ただし、NSArrayControllerの内部については、これが機能するかどうかを判断するのに十分な知識がありません。

于 2010-03-16T02:48:07.850 に答える