gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:19:47 29 4
gpt4 key购买 nike

我正在 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com