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

标签 objective-c cocoa cocoa-bindings nsarraycontroller

我正在 cocoa 应用程序中使用核心数据绑定(bind)。我的应用程序将三个 NSTableView 绑定(bind)到关系中的 NSArrayController,这样如果选择第一个表,则使用核心数据关系的相关数据将显示在其他两个表中。

我已将 NSSearchField 连接到第一个 NSArrayController。问题是当搜索开始时,其他两个表不会与第一个表保持同步。它们根本不显示任何内容。

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

最佳答案

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

自从搜索开始时,第一个 NSTableView 的选择就会丢失,因此连接的表也会丢失,尽管该表已正确更新并显示过滤值。我将 self 设置为 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 行。

关于objective-c - 使用 NSSearchField 时,辅助 NSTableView 失去焦点并且不会同时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439269/

相关文章:

objective-c - 将位图数据存储在整数数组中以提高速度?

cocoa - NSOutlineView 与核心数据驱动的绑定(bind)

带包的 Cocoa 应用程序框架

objective-c - 为什么我可以在 [super dealloc] 之后释放 ivar 而不会出现段错误?

ios - 逐渐关闭键盘 ios

Objective-C:将 float 组显示为图像

ios - OS X 核心绑定(bind)在使用 Storyboard 时不保存核心数据

cocoa - 单击鼠标时“确定”按钮的行为有所不同

ios - 如何像邮件一样在 UITextView 中显示图像并使其居中

iphone - 多线程如何在 iPhone 上的 Objective-C 中工作?