这是我的场景的简化版本,但没关系。
假设您有三个 CoreData 实体,每个实体都有一个相应的 NSManagedObject 子类,并且一对一的关系如下:
人员 -> 联系人记录 -> 电话号码
Person 实体有一个 vcard 属性,该属性以字符串形式保存该人的 vCard 数据。
PhoneNumber 实体有两个属性:实际号码和电话号码类型(手机号码、家庭号码、工作号码等)。
现在,在 Person willSave
方法中,我正在更新 vcard 属性。如果 Person 对象上的另一个属性已更改,则此方法可以正常工作。但是,如果我更改 PhoneNumber 对象上的类型或号码,或者 ContactRecord 上的任何属性,则不会在 Person 对象上调用 willSave
方法。
当 PhoneNumber 对象的属性发生变化时,是否有一个好的方法来更新 Person 对象?
现在,我看到的最佳选择是使用 NSManagedObjectContextWillSaveNotification。该通知调用的方法可以筛选已更改的对象并备份反向关系以调用 Person 对象上的某些方法,但这发生在 NSManagedObjectContext 已保存之后,因此之后需要再次保存。我希望在保存之前将此属性设置为正确的值。
最佳答案
NSManagedObjectContextWillSaveNotification 方法在保存发生之前调用,因此您可以在那里进行更改,并且不需要第二次保存。
在这种情况下,我的偏好是根本不存储 vcard,而是将其设为只读的依赖属性。我假设您不需要经常访问 vcard,因此在 getter 方法中动态生成数据应该可以正常工作,并且数据将始终是最新的。
在保存之前更新数据的一个问题是您必须确保保存。如果您尝试在不保存的情况下获取电子名片,该电子名片将会过期。依赖的只读属性不会有这个问题。
关于ios - 当关系发生变化时,有没有一种好方法来更新 NSManagedObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641154/