【发布时间】:2010-08-31 04:04:42
【问题描述】:
我的基于文档的 Cocoa 应用程序使用 NSOutlineView/NSTreeController 组合,绑定到文档的核心数据存储。我的 NSTreeController 有获取谓词 isRoot == YES。 isRoot 是一个瞬态布尔属性,默认值为NO。我的根模型的awakeFromInsert 调用:
[self setIsRoot:[NSNumber numberWithBool:YES]];
我可以将对象添加到层次结构中,但是当我尝试加载我刚刚保存的文档时,我得到一个异常:
[<NSDictionaryMapNode 0x1001a8190> valueForUndefinedKey:]: this class is not key value coding-compliant for the key isRoot.
如果我在 xcdatamodel 中将isRoot 属性更改为非瞬态,我可以解决此异常并成功加载新保存的文档,但根据我对瞬态标志的理解,它不会导致问题,并且这确实不是应该持久化的数据。
我还尝试在 NSManagedObject 子类中实现 -isRoot 以返回适当的固定值,以及在 awakeFromFetch 中进行相同的 setIsRoot: 调用,均无济于事。
我还缺少其他一些微妙之处吗?我无法想象 fetch 谓词不支持瞬态属性。我不太了解 Core Data 的内部工作原理,但它试图在特定于商店的类而不是我的 NSManagedObject 子类上查找 isRoot 似乎很有趣。
【问题讨论】:
标签: cocoa core-data nstreecontroller