2012-03-12 65 views
1

我的NSTreeController设置核心数据的父级属性而不是子级属性。NSTreeController没有设置核心数据的子属性

我有这样

Item 
    title (string) 
    isLeaf (boolean,readonly) 
    parent -> Group (inverse children) 

Group (parent entity Item) 
    children -> Item (inverse parent) 

Leaf (parent entity Item) 

核心数据模型,我再与NSOutlineView显示它并使用NSTreeController。我使用方法 - [NSTreeController insertObject:atArrangedObjectIndexPath:]尝试插入Leaf's,叶子父级属性设置正确,但父级Group.children属性仍然设置为零。

当我运行该项目,我得到的控制台

Warning: <NSTreeController: 0x7fcd93c19d20>[object class: NSMutableDictionary] childrenKeyPath cannot be nil. To eliminate this log message, set the childrenKeyPath attribute in Interface Builder 

即使childrenKeyPath在界面生成器设置以下警告,为什么它使用的NSMutableDictionary时,我有一个NSManagedObject子类SavedItem,SavedGroup和SavedLeaf。我已经下载了几个例子,但我不明白他们在做什么,我不是。

回答

2

对他人的解决方案,是我试图变得聪明,而不是在实际的核心数据定义中定义isLeaf属性。我试图在执行硬编码为返回真正取决于它是否是集团或,出于某种原因NSTreeController不喜欢这一点,即使你还定义它基类。我已经覆盖了awakeFromInsert方法并将其设置在那里。

还关注的是,NSTreeController也不喜欢它,如果你定义孩子财产在基类什么都不做/返回(即这样的集团子类可以重写它) ,子女实体将被保存,但不会显示。这是我在试图解决我最初的问题时所做的,我认为这是人们可能想知道的。