使用NSTreeController

时间:2016-06-07 09:39:42

标签: swift cocoa core-data nsoutlineview nstreecontroller

我正在开发一款使用核心数据的Mac应用。我正在使用NSOutlineView和NSTreeController来绑定视图上的数据。

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

  • 父项目1
    • 儿童项目1
    • 儿童项目2
    • 儿童项目3
  • 父项目2
    • 儿童项目4
    • 儿童项目5

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

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

  • 父项目1
    • 儿童项目1
  • 父项目2
    • 儿童项目4

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

解决方案1:实施计算的属性filteredChildren,就像这个问题:Filtering A Tree Controller并在此无关答案中提及:Is it possible to bind an NSTreeController to an NSOutlineViewDataSource?

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