2016-06-07 65 views
0

我正在开发一个使用Core数据的Mac应用程序。我正在使用NSOutlineView和NSTreeController绑定视图上的数据。用NSTreeController过滤NSOutlineView的孩子

你可以假设我的数据的结构

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

我申请一个fetchPredicate我NSTreeController成功地过滤数据。另一方面,fetchPredicate仅应用于数据的第一级(父项)。

我需要一个方法,我可以将fetchPredicate也应用于子项目。例如,如果我的标准到子项1和儿童项目4相匹配的结果应该是

  • 父件1
    • 子项1
  • 父件2
    • 儿童第4项

任何帮助将不胜感激。

+0

那么你的问题到底是什么?您在筛选儿童项目方面遇到困难的问题是什么? –

+0

感谢您的回复。正如我在我的问题中提到的,我正在将一个filterPredicate应用于NSTreeController。例如NSPredicate(format:due_on = <%@“,endDate!)但是这个过滤器只适用于父项目而不适用于子项目,我仍然看到一些子项目不符合这个标准。我需要的仅仅是将我的过滤器应用到第二级,再次感谢 – emreoktem

+1

你正在应用一个获取谓词,NSTreeController不支持过滤谓词,NSTreeController获取顶级对象并使用子关系获取儿童。如果你想过滤孩子,你必须做一些编程。 – Willeke

回答

0

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

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

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

+0

解决方案1是完美的。谢谢 – emreoktem

相关问题