问题背景:
我有一个 NSOutlineView,每个 tableColumn 都以编程方式绑定到 NSTreeController 的排列对象,因此无需绑定 selectionIndexPaths。NSTreeController 的排列对象的来源是一个 mutableArray。我通过- (void)insertObject:(id)object atArrangedObjectIndexPath:(NSIndexPath *)indexPath;
在主线程上执行动态地将所有节点添加到 NSTreeController。我以如下方式覆盖了 NSOutlineView 的 mouseDown 事件:
- (void)mouseDown:(NSEvent *)event { /*...myMethods...*/ [super mouseDown:event]; }
问题:
当节点添加得非常快并且我在 outlineView 上执行 mouseDown 事件时,通常会发生下一种情况:
将节点添加到 TreeController 的线程会中断 mouseDown 事件调用的序列(我猜),因此insertObject: atArrangedObjectIndexPath:
在 then 之前调用setSelectionIndexPaths:
。这就是为什么 outlineView 中的新选择消失了,而 treeController 仍然有旧版本的selectedIndexPaths的原因。
我尝试了一种部分解决方案:阻止我的insertObject:
方法(使用@synthesized(outlineView)
),使其无法更改整个大纲视图,但它经常在线程冲突和应用程序冻结时上升。
有什么想法可以解决选择消失的问题吗?