4

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

经过一番调查,我确定willSave没有为新创建的实例调用该方法,其中updatedOn没有初始化为任何值。因为这个属性没有被设置为可选的,所以验证失败,显然willSave只有当实例有效时才会调用该方法。

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

4

1 回答 1

6

willSave文档提到了使用时间戳的方法,尽管提到了更改属性值和递归的一些复杂性,但它并没有特别警告这种使用。所以我想,基于这个事实,它可以被认为是放置这个功能的合理地方。

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

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

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

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

于 2012-07-20T12:46:13.910 回答