NSManagedObject的willSave没有被调用无效对象

Tim*_*ean 4 core-data objective-c iphonecoredatarecipes ios

我有一个带有updatedOn属性的NSManagedObject类.我希望实现逻辑以在类的willSave方法中设置它的值.当我尝试这样做时,我发现在我的这个类的实例上从未调用过willSave.

经过一些调查,我确定willSave没有为新创建的实例调用该方法,其中updatedOn没有初始化为任何值.由于此属性未设置为可选,因此验证失败,显然willSave只有在实例有效时才会调用该方法.

我的问题是:做这种事是否有最好的做法?我是否需要使updatedOn属性可选以解决此问题?或者我应该实现awakeFromInsert我的类的方法在那里设置初始值,然后在willSave最终调用方法时覆盖该值?或者是否有一些更简单的方法更有意义?

Ror*_*yan 6

willSave文档提到了使用该方法进行时间戳,尽管提到了有关更改属性值和递归的一些复杂情况,但它并未特别针对此用法发出警告.所以我想,基于这个事实,它可以被认为是放置此功能的合理位置.

但是,文档确实指的是NSManagedObjectContextWillSaveNotification用于计算公共时间戳的用法 ,因此这可能是此工作的替代位置.它需要手动检查insertedObjectsupdatedObjects集合managedObjectContext以找到需要时间戳的对象,但基于一些快速测试,它似乎在验证步骤之前调用,因此您将有机会在此处设置所需的属性.

如果你选择坚持,willSave那么我猜你有3个选择.

  • 模型中具有指定默认值的必需属性.
  • 在awakeFromInsert或其他一些合适的点上设置属性的必需属性.
  • 可选属性.

我认为任何选项都是合理的选择,但我认为如果是我,我可能会NSManagedObjectContextWillSaveNotification因为在willSave中设置属性值的复杂性而选择.