swift - 使用 NSTreeController 过滤 NSOutlineView 的子级

标签 swift cocoa core-data nsoutlineview nstreecontroller

我正在开发一个使用 Core 数据的 Mac 应用程序。我正在使用 NSOutlineView 和 NSTreeController 在 View 上绑定(bind)数据。

您可以假设我的数据结构为

  • 父项目 1
    • 子项目 1
    • 子项目 2
    • 子项目 3
  • 父项目 2
    • 子项目 4
    • 子项目 5

我正在将 fetchPredicate 应用于我的 NSTreeController 以成功过滤数据。另一方面,fetchPredicate 仅应用于数据的第一级(父项)。

我需要一种方法,可以将 fetchPredicate 也应用于子项。例如,如果我的条件与子项 1 和子项 4 匹配,则结果应为

  • 父项目 1
    • 子项目 1
  • 父项目 2
    • 子项目 4

任何帮助将不胜感激。

最佳答案

您正在应用获取谓词。 NSTreeController 不支持过滤谓词。 NSTreeController 使用 fetch 谓词来获取顶级对象,并使用子关系来获取子对象。不会获取子级,并且不会使用获取谓词来获取子级。

解决方案 1:实现计算属性 filteredChildren,如本问题所示:Filtering A Tree Controller并在这个不相关的答案中提到:Is it possible to bind an NSTreeController to an NSOutlineViewDataSource?

解决方案 2:使用数据源而不是绑定(bind),上面的答案中也提到了。

关于swift - 使用 NSTreeController 过滤 NSOutlineView 的子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37675719/

相关文章:

ios - Swift中根据位置查询iOS照片库

ios - 如何使用 UIApplication 和 openURL 并从 foo ://q=string? 调用 "string"上的 swift 函数

macos - 在 OS X 10.10 中,我可以在没有 NSCell 的情况下实现 NSControl 吗?

objective-c - Mac OS X 上的图像处理入门

ios - 以编程方式更新核心数据中的重复值?

ios - 使用 iCloud 更改刷新 UITableView

快速 Split View Controller 默认单元格

objective-c - 如何获取 NSTextStorage/NSString 中的单词数?

ios - 重新排列 UITableView 中的行;保存到核心数据

ios - Mapbox iOS 集群有效,但圆形样式层和数字层未出现/反射(reflect)集群的标记密度