我有这个简化的模型: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,但我没有成功...... :(
有什么想法吗?
答案 0 :(得分:2)
为了确保对您的结构的更改反映在您的自定义属性中,您必须在键和键路径之间定义依赖关系(请参阅-keyPathsAffectingValueForKey :)。但是,因为您的密钥路径是基于动态路径的,所以您不能真正这样做,或者您最终会得到一个不断增长的依赖项列表。
所以你必须手动多做一点。每次更改树中的节点时,都必须将-willChangeValueForKey:和-didChangeValueForKey:消息发送到自定义树控制器对象,这将触发重新加载展平的树阵列。只要确保你实际上重新创建了数组。我假设你正在走树并手动展平它。