Objective c 以编程方式扩展NSOutlineView

Objective c 以编程方式扩展NSOutlineView,objective-c,macos,cocoa,nsoutlineview,Objective C,Macos,Cocoa,Nsoutlineview,我的要求是这样的 在NSOutlineview的顶部会有一个搜索文本字段,NSOutline视图可能包含嵌套组 如果某个项目/行与搜索查询匹配,则应显示该项目/行,该项目/行的所有父节点都将显示到根级别 我的做法如下: 1--根据用户输入的内容,重新构建NSOutlineview数据源(除了NSArray之外什么都没有) 2--实现了所有委托方法 现在我的问题是团队并没有自动扩大,我知道我应该打电话 -expandItem:expandChildren:, 但我的问题是,我应该从何处调用它,我

我的要求是这样的

在NSOutlineview的顶部会有一个搜索文本字段,NSOutline视图可能包含嵌套组

如果某个项目/行与搜索查询匹配,则应显示该项目/行,该项目/行的所有父节点都将显示到根级别

我的做法如下:

1--根据用户输入的内容,重新构建NSOutlineview数据源(除了NSArray之外什么都没有)

2--实现了所有委托方法

现在我的问题是团队并没有自动扩大,我知道我应该打电话

-expandItem:expandChildren:,
但我的问题是,我应该从何处调用它,我在重新加载数据后调用了它,但它不起作用

我试着这样称呼它

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item {
    if(aTableColumn == nil){
        [self log:@"aTableColumn is NIL "];
        return nil;
    }   
    if([[aTableColumn identifier] isEqualToString:@"firstColumn"] ){
        if ( [myOutlineView shouldExpandIt:item]){
            [myOutineView expandItem:item];
        }
        return item;
    }
    return item;
}
但它的缺点可能是递归循环


任何其他实现相同目标的方法

感谢大家的关注

通过输入日志,我发现,[NSOutlineView reloadData]似乎在阻止调用

所以在那之后,如果我需要展开/折叠组,我使用

  [pCTOutlineView expandItem:pValue];

到目前为止一直在工作

我会确保在处理其他委托或数据源方法时不会调用它。您可以尝试进行延迟调用,例如在主线程上使用
dispatch\u async
。当您说您正在“重建数据源”时,您是什么意思?您的搜索功能是否从NSArray中筛选/删除对象?@zic10如果您使用NSTreeController/NSArrayController,您希望扩展该节点值。在上面的例子中,你必须得到一个合适的TreeNode并将其用作pValue?例如:“[[self.outlineViewController arrangedObjects]childNodes][i]”。