假设我有一个名为Item
的NSManagedObject
子类。每当保存item
实例时,我想根据瞬态属性的计算值更新属性。我知道,只要瞬态属性发生变化,我就可以更新属性,但对于这个问题,假设我不想这样做的一个很好的理由。如何在保存之前自动设置计算的NSManagedObject属性?
我试图做到这一点的方法willSave
如下:
- (void)willSave
{
self.computedProperty = [self computedValueFromTransientProperty];
}
保存上下文时,这会导致系统崩溃。如果我将代码移出willSave
并在调用save之前显式设置该属性,则它可以正常工作。苹果文档说你应该避免更改willSave
中的托管对象属性。
问题:是否有一种很好的方法可以将功能构建到NSManagedObject
子类中,因此属性可以在保存之前进行更新,无需从类的外部明确设置属性,并且无需每次设置属性瞬态属性更改?
谢谢,我没看到在文档中,但没有直接思考。我使用了你的第一个建议,但是为了消除双重计算,添加了一个初始化为nil并在'didSave'中设置为零的iVar。在'willSave'中,如果这个iVar是零,我将它设置为计算值。然后我使用上面的逻辑将这个iVar与持久属性进行比较。很好的工作,我只做一次昂贵的计算。谢谢! – XJones