0

我想动态更改核心数据模型中某些属性的默认值。

例如,我的应用程序处理房地产投资,并且我有一个与利率有关的属性(Float 类型)。如果用户为他们正在分析的特定属性输入 3.5% 的利率(浮动值为 3.5),我希望他们分析的下一个属性的值自动填充为 3.5。

有没有办法在不继承 NSManagedObject 的情况下实现这一点?

4

1 回答 1

6

好问题 - 默认情况下,托管对象使用托管对象模型中给出的默认值进行初始化。但就像你说的,有时你可能想要一个动态的默认值(Apple 在他们自己的文档中使用的示例是使用当前日期/时间作为默认值)。

不幸的是,我不相信没有子类化可以做到这一点NSManagedObject。有一个 Apple 推荐的方法来做到这一点 - 而不是覆盖该init方法(不推荐),而是使用该awakeFromInsert方法,当有问题的对象首次插入托管对象上下文时调用该方法。

这是 Apple 从他们自己的文档中所说的:

awakeFromInsert:

您通常使用此方法来初始化特殊的默认属性值。此方法在对象的生命周期中仅调用一次。

如果你想在这个方法的实现中设置属性值,你通常应该使用原始访问器方法(setPrimitiveValue:forKey:或者——更好——适当的自定义原始访问器)。这可确保新值被视为基线值,而不是被记录为相关属性的可撤消更改。

所以要回答你原来的问题 - 我想不出没有子类化的方法NSManagedObject,而子类化是官方推荐的处理动态默认值的方法。

于 2013-05-31T11:20:29.607 回答