使用 NSSearchField 时,辅助 NSTableView 失去焦点并且不会同时更新

When using NSSearchField , secondary NSTableView looses focus and do not update simultaneously

我在 cocoa 应用程序中使用核心数据绑定。我的应用程序有三个 NSTableViews 绑定到那里的 NSArrayControllers 关系,这样如果第一个 table 被选择,使用核心数据关系的相关数据显示在其他两个 tables.

我已将 NSSearchField 连接到第一个 NSArrayController。问题是当搜索开始时,其他两个 table 与第一个 one.They 不保持同步,什么也没有显示。

其他两个 table 仅在用户单击第一个时才显示内容。 如何在搜索发生时同时更新所有三个 NSTables。

所以,我有这个有效的解决方案,我想知道是否可以进一步改进。

自从搜索开始后,第一个 NSTableView 的 selection 丢失了,因此连接的 tables 也丢失了,尽管 table 已正确更新显示过滤值。我将自己设置为更改的观察者是 NSArrayController selectedObject.

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

现在我正在观察变化,如果 selected 对象确实发生变化,如果 NSSearchField 是改变它的那个,以编程方式select 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 过滤时,第一个对象是最相​​关的,因此我将 selection 设置为第 0 行。