我的基于文档的 Cocoa 应用程序使用 NSOutlineView/NSTreeController 组合,绑定到文档的核心数据存储。我的 NSTreeController 有 fetch predicate 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.
isRoot
如果我在 xcdatamodel 中将属性更改为非瞬态,我可以解决此异常并成功加载新保存的文档,但根据我对瞬态标志的理解,它不应该引起问题,这真的不是应该持久化的数据类型。
我还尝试-isRoot
在 NSManagedObject 子类中实现以返回适当的固定值,以及在setIsRoot:
内进行相同的调用awakeFromFetch
,但均无济于事。
我还缺少其他一些微妙之处吗?我无法想象 fetch 谓词不支持瞬态属性。我对 Core Data 的内部工作了解不多,但它试图查找isRoot
特定于商店的类而不是我的 NSManagedObject 子类似乎很有趣。