NSTreeController未设置Core Data子属性

时间:2012-03-12 10:45:43

标签: objective-c cocoa core-data nsoutlineview nstreecontroller

我的NSTreeController正在设置Core Data父属性,但不是子属性。

我有像这样的核心数据模型

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,正确设置了leafs parent属性,但是父Group.children属性仍然设置为nil。

当我运行项目时,我在控制台上收到以下警告

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

即使在接口构建器中设置了childrenKeyPath,当我有一个NSManagedObject子类SavedItem,SavedGroup和SavedLeaf时,为什么它使用NSMutableDictionary。我已经下载了几个例子,但我看不到他们在做什么,我不是。

1 个答案:

答案 0 :(得分:2)

其他人的解决方案是,我试图变得聪明,而不是在实际的核心数据定义中定义 isLeaf 属性。我试图在实现中硬编码它作为返回 true false ,具体取决于它是 Group 还是 Leaf ,由于某种原因 NSTreeController 不喜欢这样,即使你也在基类中定义它。我已经覆盖了 awakeFromInsert 方法并将其设置在那里。

同样令人感兴趣的是, NSTreeController 也不喜欢它,如果你在基类中定义 children 属性什么都不做/ return nil (即所以 Group 子类可以覆盖它), children 实体将被保存,但不会显示它们。这是我在尝试解决我最初的问题时所做的,我认为这是人们可能想知道的事情。