我的基于文档的Cocoa应用程序使用NSOutlineView / NSTreeController组合,该组合绑定到文档的Core Data存储。我的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
以返回适当的固定值,以及在setIsRoot:
中进行相同的awakeFromFetch
调用,但均无济于事。
我还有其他细微之处吗?我无法想象获取谓词不支持瞬态属性。我对Core Data的内部工作了解不多,但似乎很有趣,它试图在特定于商店的类而不是我的NSManagedObject子类上查找isRoot
。
最佳答案
我无法想象获取谓词
不支持瞬态属性。
经过一些研究,我可以告诉你他们没有。 See this document.引用:
您无法使用谓词来获取
基于瞬态特性
(尽管您可以使用瞬态
要在内存中过滤的属性
你自己)。
我整理了一个测试项目,可以验证是否得到与您完全相同的错误。
当我需要过滤出树中的根节点时,我使用parent == nil
的提取谓词而不是瞬时属性。
我了解您的反应-我也想拥有一个专门称为isRoot的属性的方法。我的猜测是有可能的,但是要花很多代码,这简直是不值得的麻烦。
哦,如果您要处理的核心数据不止一个,那么mogenerator将使您的生活更加轻松。
关于cocoa - NSTreeController基于瞬时isRoot异常获取谓词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3605957/