如何将更改从一个ManagedObject写入类似的ManagedObjects

时间:2014-10-14 07:48:15

标签: ios objective-c core-data

我是Core Data的新手,并且有一个问题听起来微不足道(至少在SQL中思考)但我无法通过Core Data来解决这个问题。

我尝试做的是以下内容:我有一个获取的ManagedObject,进行一些更改并再次保存。此ManagedObject具有属性id。我想将对此ManagedObject所做的更改写入具有相同id的所有ManagedObject。

我正在考虑覆盖willSave:并在其中获取具有相同ID的其他ManagedObjects,但这不会起作用,因为我会在那里遇到无限循环。

有人可以给我一个关于如何从这里进步的提示吗?提前致谢

2 个答案:

答案 0 :(得分:1)

你可以使willSave工作,但忽略所有无效触发器并不是一个很好的代码。

最好有一个管理此功能的类,传入新的数据值和属性id,并允许它进行获取并更新所有获取的对象(并触发保存)。

答案 1 :(得分:1)

我确实会尝试找到一些更好的方法来处理它,因为实际上你不应该把它的核心数据想象成SQL及其触发器。

但实际上你确实可以使用willSave方法并避免无限循环。看到 NSManagedObject Class Reference将保存方法

  

如果使用原始访问器更改属性值,则可以避免无限递归,但Core Data不会注意到您所做的更改。

所以基本上在你的willSave方法中,你需要调用一些fetchRequest来获取同一个实体的所有实例,然后循环遍历它们并使用原始访问器进行更新:setPrimitiveValue:forKey:

此外,我建议验证循环中的对象是否被删除(-isDeleted),并且可能是该对象是否是当前对象(通过比较managedObjectIDs)