Interface Builder で setSelectsInsertedObjects を YES に設定して、NSUserDefaults コントローラーにバインドされた NSArrayController がありますが、[追加] をクリックすると、新しく追加されたオブジェクトが選択されるのではなく、以前に選択されていたオブジェクトが選択解除されます。
私は何が欠けていますか?
Interface Builder で setSelectsInsertedObjects を YES に設定して、NSUserDefaults コントローラーにバインドされた NSArrayController がありますが、[追加] をクリックすると、新しく追加されたオブジェクトが選択されるのではなく、以前に選択されていたオブジェクトが選択解除されます。
私は何が欠けていますか?
それらをどのようにバインドしていますか?NSArrayController の「コンテンツ」バインディングによるものであれば、selectionIndexes を同じオブジェクトにバインドしようとしていると思います。このクラス (NSIndexSet) は NSUserDefaults では機能しません (理由はわかりませんが、過去に同じ問題がありました。オブジェクトのライフサイクルと関係があると思います。空として初期化されてからインデックスが追加されます)。か何か)。setSelectsInsertedObjects が行っているのは、新しいオブジェクトが追加されたときに selectionIndexes を自動的に更新するだけであり、基本的に NSUserDefaults コントローラーがそれを台無しにしています。どこにあるかはわかりませんが、NSArrayController のバインディングを探し回ると、自動的に NSUserDefaults にバインドされた selectionIndexes (または関連するもの) のバインディングが見つかると思います。チェックを外すと、
selectsInsertedObjects
私が理解しているように、それはほとんど意味があります。ユーザーが新しいアイテムを追加すると、以前の選択が置き換えられて新しいアイテムが選択されます。
別の動作が必要な場合は、NSArrayControllerを拡張するか、NSArrayControllerをデリゲートとして使用する独自のコントローラークラスを作成できますNSProxy
。私はあなたがオーバーライドadd:
する必要があると信じています:
add:
ただし、NSArrayControllerの内部については、これが機能するかどうかを判断するのに十分な知識がありません。