如何获取所选NSTreeController对象的所有子节点,孙子节点和曾孙子节目

时间:2011-07-06 18:47:34

标签: objective-c cocoa filter nstreecontroller

我有这个简化的模型:http://i.imgur.com/EAug3.png

我在NSOutlineView中对这些元素进行了排序,并由NSTreeController控制。

所以我创建了一些虚拟数据:

Folder1
|___ SubFolder1
     |___Element1
     |___Element2
|___ SubFolder2
     |___SubSubFolder1
         |___Element3

现在的问题是: 如果我选择Folder1,如果选择Subfolder1,如何保存Element1和Element2,如何获得包含Element1,Element2,Element3的数组?

我的第一个方法是创建一个新的NSArrayController绑定到我的NSTreeController对象的自定义属性(为此获得了一个类),但该属性只调用一次,之后不再更新。 我的第二种方法是写一个Fetch Predicate,但我没有成功...... :(

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

为了确保对您的结构的更改反映在您的自定义属性中,您必须在键和键路径之间定义依赖关系(请参阅-keyPathsAffectingValueForKey :)。但是,因为您的密钥路径是基于动态路径的,所以您不能真正这样做,或者您最终会得到一个不断增长的依赖项列表。

所以你必须手动多做一点。每次更改树中的节点时,都必须将-willChangeValueForKey:和-didChangeValueForKey:消息发送到自定义树控制器对象,这将触发重新加载展平的树阵列。只要确保你实际上重新创建了数组。我假设你正在走树并手动展平它。