objective-c - NSTreeController 未设置 Core Data 子属性

标签 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,leaf 父属性设置正确,但父 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。我已经下载了几个示例,但我看不到他们在做什么而我没有。

最佳答案

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

同样有趣的是,如果您在基类中定义 children 属性不执行任何操作/返回 nilNSTreeController 也不喜欢它> (即,Group 子类可以覆盖它), 实体将被保存,但不会显示。这是我为了解决最初的问题所做的事情,我认为这是人们可能想知道的事情。

关于objective-c - NSTreeController 未设置 Core Data 子属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9665632/

相关文章:

objective-c - if() 中的字符串比较遵循错误的分支

ios - UITabBarItem setFinishedSelectedImage : deprecated in iOS7

ios - UIView 及其 subview 上的 UITapGestureRecognizer 在 subview 被点击时一起响应

swift - 使用圆形按钮更改 NSButton 的背景

ios - RestKit在映射或实际插入CoreData DB之前比较本地对象和远程对象

ios - 为什么 NSManagedObject 实例不持有对其 NSManagedObjectContext 的强引用?

iphone - 需要 iOS 核心数据架构技巧

objective-c - 我的唯一代码的线程安全性如何?

ios - 尝试包含库时未知类型名称

cocoa - 获取管理员权限以使用 rm 从 Cocoa 应用程序删除文件