2011-07-06 92 views
1

的所有孩子的,grandchilds和grandgrandchilds我有这个简化的模型:http://i.imgur.com/EAug3.png我怎样才能得到一个选择NSTreeController对象

我有这些元素在NSOutlineView有序,由NSTreeController控制。

所以我创建了一些假的数据:

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

现在的问题: 我怎样才能保持部件1,元素2,元素3,如果我选择Folder1中,并保存元素1和元素2,如果我选择阵列Subfolder1?

我的第一种方法是创建一个新的NSArrayController绑定到我的NSTreeController对象的自定义属性(为此类创建一个类),但该属性只调用一次,之后不再更新。 我的第二个办法是写一个获取谓语,但我不是全成... :(

任何想法?

回答

2

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

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

+0

对不起,我不能给你投票(我没有足够的声望),但这解决了我的问题THX! :) ** - (void)didChangeValueForKey:(NSString *)key if {[key isEqualToString:@“selection”]){self didChangeValueForKey:@“allSubelements”]; } [super didChangeValueForKey:key]; } ** –

+0

哎...现在我可以投你:) –

相关问题