Поиск сбрасывает выбор NSArrayController до нуля

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

введите здесь описание изображения

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

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

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

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

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


person Jay    schedule 06.10.2012    source источник


Ответы (1)


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

person Richard Stahl    schedule 06.10.2012
comment
э- серьезно? Это очень разочаровывает! В любом случае, спасибо за подсказку, я попробую этот подход. - person Jay; 06.10.2012
comment
Позвольте мне немного пояснить. Контроллер массива сохранит свой выбор, если выбранные объекты остаются в упорядоченных объектах во время фильтрации, если для контроллера массива установлен флажок «Сохранить выбор». Документация здесь немного неясна. В документации опция сохранения выбора определяет, запоминает ли контроллер свой выбор при изменении его содержимого. В этом случае мы фильтруем существующий контент, не изменяя его; но, тем не менее, оказывается, что и в этом случае применима опция сохранения выбора. - person Richard Stahl; 07.10.2012
comment
Мое разочарование на самом деле было связано с setAvoidsEmptySelection — в документах указано, что если YES, получатель сохраняет выбор, если в массиве контента нет объектов.. Однако при фильтрации с помощью предиката выборка может фактически стать пустой, когда в массиве содержимого все еще есть элементы. - person Jay; 08.10.2012
comment
Документация, по-видимому, относится только к случаю, когда содержимое контроллера массива фактически изменяется, например. настройка основной детали. Здесь содержимое не меняется только упорядоченные объекты за счет фильтрации. - person Richard Stahl; 08.10.2012