什么时候CoreData中的瞬态属性应该包含在对象模型中?

Fel*_*oux 9 cocoa database-design core-data objective-c object-model

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

  1. 可以在对象模型中定义瞬态属性,然后在相关类中需要时计算它们.
  2. 但是,如果您指定一个类并为任何瞬态属性定义任意getter方法而不在对象模型中声明它(只要该实体链接到模型中的该类),那么事情也会起作用.

我的问题:在对象模型中声明瞬态属性有什么好处?我只看到一个漏洞:每次添加一个瞬态属性(例如"FormattedDate")时,persistentStore都会变得不兼容.

我错过了什么?

Jos*_*zzi 6

来自核心数据编程指南:

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

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

至于MOM版本控制,核心数据模型版本控制和数据迁移编程指南说:

Core Data对版本控制的看法是它只对影响持久性的模型特征感兴趣.

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