我想动态更改核心数据模型中某些属性的默认值。
例如,我的应用程序处理房地产投资,我有一个与利率相关的属性(Float类型)。如果用户为他们正在分析的特定属性输入3.5%的利率(浮动值为3.5),我希望他们分析的下一个属性的值自动填充3.5。
有没有办法在没有子类化NSManagedObject的情况下完成这个?
答案 0 :(得分:6)
好问题 - 默认情况下,使用托管对象模型中给出的默认值初始化托管对象。但是就像你说的,有时你可能想要一个动态默认值(Apple在他们自己的文档中使用的例子是使用当前日期/时间作为默认值)。
不幸的是,我不相信没有子类化NSManagedObject
就可以做到这一点。有一种Apple建议的方法 - 而不是覆盖init
方法(不推荐),而是使用awakeFromInsert
方法,当有问题的对象首次插入到托管对象时调用该方法上下文。
这是苹果公司在他们自己的文档中所说的话:
awakeFromInsert:
您通常使用此方法初始化特殊的默认属性值。此方法仅在对象的生命周期内调用一次。
如果要在此方法的实现中设置属性值,通常应使用原始访问器方法(
setPrimitiveValue:forKey:
或更好 - 适当的自定义原始访问器)。这可确保将新值视为基线值,而不是将其记录为相关属性的可撤消更改。
所以回答你原来的问题 - 如果没有子类化NSManagedObject
,我就无法想到这样做的方法,而子类化是官方推荐的处理动态默认值的方法。