2016-02-16 2 views
1

Я использую привязку основных данных в приложении для какао. Мое приложение имеет три NSTableViews, привязанных к ним NSArrayControllers, в связи с тем, что если выбрана первая таблица, соответствующие релевантные данные с использованием отношения данных ядра отображаются в двух других таблицах.При использовании NSSearchField вторичный NSTableView теряет фокус и не обновляется одновременно

Я подключил NSSearchField к первому NSArrayController. Проблема в том, что поиск начинается с того, что две другие таблицы не синхронизируются с первой. Они ничего не показывают.

Остальные две таблицы показывают только контент, если первый, если щелкнуть по нему. Как сделать все три обновления NSTables одновременно при поиске.

+0

Попробуйте опцию «постоянно обновлять значение» во всем мире. – stevesliva

+0

@stevesliva, все еще не обновляясь даже после того, как «постоянно обновляет значение» выбрано для всех NSTable. – Khundragpan

+0

Ключевым будет поле поиска ... но я не уверен, что это действительно решение, просто что-то попробовать, а значит, просто комментарий. Удачи. +1. – stevesliva

ответ

0

Итак, у меня есть это решение, которое работает, я хотел бы знать, может ли это быть улучшено дальше.

С тех пор, как поиск начинается, первый выбор NSTableView теряется и, следовательно, связанные таблицы также, хотя таблица обновляется корректно, показывая отфильтрованное значение. Я устанавливаю себя как наблюдателя для изменения, это NSArrayController selectedObject.

-(void)awakeFromNib{ 
[super awakeFromNib]; 
[_firstArrayController addObserver:self forKeyPath:@"selectedObjects" options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld context:NULL]; 
} 

Теперь я наблюдаю за изменениями, и если выбранный объект действительно изменится, и если NSSearchField это один изменяя его, программно выбрать NSTableView первый ряд

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id) 
object change:(NSDictionary *)change context:(void *)context 
{ 
    NSResponder *firstResponder = [[NSApp keyWindow] firstResponder]; 
if ([firstResponder isKindOfClass:[NSText class]] && [(id)firstResponder delegate] == _searchField) { 
    NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:0]; 
    [_authorTable selectRowIndexes:indexSet byExtendingSelection:NO]; 
} 
} 

Поскольку при фильтрации с использованием NSSearchField, то первый объект что самое актуальное, поэтому я устанавливаю выделение в строку 0.

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