何时应将Core Data中的瞬态属性包含在对象模型中?

时间:2009-11-14 13:07:24

标签: objective-c cocoa database-design core-data object-model

我不确定瞬态属性的正确定义:

  1. 可以在对象模型中定义瞬态属性,然后在相关类中需要时计算它们。
  2. 但是,如果您指定一个类并为任何瞬态属性定义任意getter方法而不在对象模型中声明它(只要实体链接到模型中的该类),那么事情也会起作用。
  3. 我的问题:在对象模型中声明瞬态属性有什么好处? 我只看到一个漏洞:每次添加一个瞬态属性(例如“FormattedDate”)时,persistentStore都会变得不兼容。

    我错过了什么?

1 个答案:

答案 0 :(得分:6)

来自Core Data Programming Guide

  

如果不支持的属性是对象,则在托管对象模型中将其类型指定为未定义,并且它是瞬态的。实现实体的自定义类时,无需为属性添加实例变量 - 您可以使用托管对象的私有内部存储。关于下面描述的实现的注意事项是它们缓存瞬态值。这使得访问价值更有效 - 它也是变更管理的必要条件。如果定义自定义实例变量,则应该在didTurnIntoFault中清除这些变量,而不是dealloc或finalize。

我认为这意味着“方便”和“将所有属性定义在一个地方 - 管理对象模型”。

至于MOM版本控制,Core Data Model Versioning and Data Migration Programming Guide说:

  

Core Data对版本控制的看法是,它只对影响持久性的模型功能感兴趣。

然而,它没有阐明其对瞬态特性的立场。事实上,阐述该段的第二个要点几乎听起来像是一个矛盾。快速测试(带有“name”属性的简单“Foo”实体的新项目,保存具有多个foos的文件,添加瞬态属性,再次运行,并且foos全部加载,添加新的foo,保存,关闭,重新打开)显示版本系统不考虑瞬态属性。