1

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

我在 NSOutlineView 中订购了这些元素,并由 NSTreeController 控制。

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

文件夹 1
|___子文件夹1
     |___元素1
     |___元素2
|___ 子文件夹2
     |___子子文件夹1
         |___元素3

现在的问题是:如果我选择 Folder1,我怎样才能得到一个包含 Element1、Element2、Element3 的数组,如果我选择 Subfolder1,我怎样才能得到一个包含 Element1 和 Element2 的数组?

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

有任何想法吗?

4

1 回答 1

2

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

因此,您必须手动进行更多操作。每次更改树中的节点时,都必须向自定义树控制器对象发送 -willChangeValueForKey: 和 -didChangeValueForKey: 消息,这将触发扁平化树数组的重新加载。只需确保您实际上也重新创建了数组。我假设您正在走树并手动将其展平。

于 2011-07-06T19:22:38.187 回答