有没有办法更改核心数据属性的默认值

时间:2013-05-31 11:11:51

标签: objective-c core-data

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

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

有没有办法在没有子类化NSManagedObject的情况下完成这个?

1 个答案:

答案 0 :(得分:6)

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

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

这是苹果公司在他们自己的文档中所说的话:

  

awakeFromInsert:

     

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

     

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

所以回答你原来的问题 - 如果没有子类化NSManagedObject,我就无法想到这样做的方法,而子类化是官方推荐的处理动态默认值的方法。