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

Che*_*Dev 0 core-data objective-c

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

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

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

lxt*_*lxt 6

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

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

以下是Apple在他们自己的文档中所说的话:

awakeFromInsert:

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

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

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