我的基于文档的Cocoa应用程序使用NSOutlineView / NSTreeController组合,该组合绑定到文档的Core Data存储。我的NSTreeController具有提取谓词isRoot == YESisRoot是一个临时布尔属性,默认值为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/

10-12 05:41