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

时间:2012-07-20 03:33:13

标签: objective-c ios core-data iphonecoredatarecipes

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

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

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

1 个答案:

答案 0 :(得分:6)

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

但是,文档确实使用NSManagedObjectContextWillSaveNotification来计算公共时间戳,因此这可能是此工作的替代位置。这需要手动检查insertedObjects上的updatedObjectsmanagedObjectContext集合以找到需要时间戳的对象,但是基于一些快速测试,它似乎在验证之前被调用步骤,这样你就有机会在这里设置所需的属性。

如果您选择坚持willSave,那么我猜您有3个选项。

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

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