2

У меня есть NSTableView, связанный с NSArrayController через content и selection indexes. Все великое до сих пор - содержание отображается и т.д.Поиск сбрасывает выбор NSArrayController none

enter image description here

теперь NSSearchField связанно с контроллером массива через filterPredicate и свойство экземпляров содержимого массива, что это для поиска.
Поиск/фильтрация рабочего стола отлично работает; вид таблицы, показывающий только соответствующие записи.

Однако, поиск сбрасывает выбор на NSTableView, если существующего выбора нет в результатах поиска. Хуже того, не только во время поиска, но и после окончания поиска на табличном представлении нет выбора.

NSArrayController настроен на Избегать пустого выбора.

Однако, отладка контроллера массива selection indexes показывает, что поиск сбрасывает их до пустого набора. Не совсем знаю, что сделать из него ..

Любые подсказки о том, как правильно настроить привязки в этом сценарии для действительно предотвратить пустой выбор высоко ценится!

ответ

3

К сожалению, контроллеры массива не отслеживают и не восстанавливают выделение по мере изменения их упорядоченных объектов. Вы должны сделать это сами в коде. Вы можете отслеживать текущий выбор, используя KVO для наблюдения за выбором на контроллере массива. Вы также можете наблюдать за размещенными объектами контроллера, чтобы знать, когда он изменяется в результате фильтрации. При каждом изменении просто установите текущий выбор обратно на отслеживаемое значение (при условии, что он все еще находится в организованных объектах) или установите выделение на новое значение.

+1

Ух - серьезно? Это очень неутешительно! Anywho, спасибо за подсказку, я попробую этот подход. – Jay

+0

Позвольте немного пояснить. Контроллер массива * будет * сохранять свой выбор, если выбранные объекты остаются в организованных объектах во время фильтрации, если опция «Сохранять выбор» отмечена для контроллера массива. Документация здесь немного неясна. В документации опция выбора консервов определяет, будет ли контроллер запоминать свой выбор, когда изменяется его * контент. В этом случае мы фильтруем существующий контент, не меняя его; но тем не менее, похоже, что в этом случае также применяется опция выбора консервов. –

+1

Мое разочарование действительно касалось ** 'setAvoidsEmptySelection' ** - состояния документов, которые *« Если ДА, приемник поддерживает выбор, если в массиве содержимого нет объектов ». *. Однако при фильтрации с предикатом выбор может фактически стать пустым, когда в массиве содержимого все еще есть элементы. – Jay

Смежные вопросы