setSelectsInsertedObjects на NSArrayController фактически не выбирает - PullRequest
1 голос
/ 13 марта 2010

У меня есть NSArrayController, связанный с контроллером NSUserDefaults, с setSelectsInsertedObjects, установленным в YES в Интерфейсном Разработчике, но когда я нажимаю кнопку Добавить, ранее выбранный объект становится невыбранным, вместо выбора вновь добавленного объекта.

Что мне не хватает?

Ответы [ 2 ]

3 голосов
/ 16 марта 2010

Как вы их связываете? Если это происходит через привязку содержимого к NSArrayController, то я считаю, что он пытается привязать selectionIndexes к тому же объекту. Этот класс (NSIndexSet) не работает с NSUserDefaults (я понятия не имею, почему, но у меня была такая же проблема в прошлом - я думаю, что это как-то связано с жизненным циклом объекта; он инициализируется как пустой, а затем добавляет индексы или что-то). Что setSelectsInsertedObjects делает, просто автоматически обновляет selectionIndexes, когда добавляется новый объект, и в основном ваш NSUserDefaults контролирует это. Я не уверен, где это, но я думаю, что если вы будете охотиться вокруг привязок NSArrayController, вы найдете один для selectionIndexes (или чего-то связанного), который автоматически был привязан к NSUserDefaults для вас; если снять этот флажок, все должно работать.

1 голос
/ 16 марта 2010

Это почти то, что означает selectsInsertedObjects, насколько я понимаю. Когда пользователь добавляет новый элемент, новый элемент выбирается вместо предыдущего.

Если вам нужно другое поведение, вы можете расширить NSArrayController или создать свой собственный класс контроллера, который использует NSArrayController в качестве делегата, возможно, на основе NSProxy. Я считаю, что вам нужно переопределить add: на:

  1. сохранить текущий выбор
  2. позвонить родителю add:
  3. объединить текущий выбор с сохраненным выбором
  4. установить выделение для объединенного выделения

Однако я не знаю достаточно о внутренних элементах NSArrayController, чтобы сказать, будет ли это работать.

...