【问题标题】:Filtering children of NSOutlineView with NSTreeController使用 NSTreeController 过滤 NSOutlineView 的子项
【发布时间】:2016-06-07 09:39:42
【问题描述】:

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

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

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

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 那么您的问题到底是什么?您在过滤子项方面遇到的困难是什么?
  • 感谢您的回复。正如我在问题中提到的,我将 filterPredicate 应用于 NSTreeController。例如 NSPredicate(format: due_on =
  • 您正在应用提取谓词。 NSTreeController 不支持过滤谓词。 NSTreeController 获取顶层对象并使用子关系来获取子对象。如果你想过滤孩子,你必须做一些编程。
  • @Willeke 感谢您的回复。我可以进行任何编程,但在 NSTreeController 从核心数据创建子节点时找不到中断点。
  • 在 SO 中搜索“NSTreeController 过滤器”。

标签: swift cocoa core-data nsoutlineview nstreecontroller


【解决方案1】:

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

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

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

【讨论】:

  • 解决方案 1 是完美的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
相关资源
最近更新 更多