我是Core Data的新手,并且有一个问题听起来微不足道(至少在SQL中思考)但我无法通过Core Data来解决这个问题。
我尝试做的是以下内容:我有一个获取的ManagedObject,进行一些更改并再次保存。此ManagedObject具有属性id。我想将对此ManagedObject所做的更改写入具有相同id的所有ManagedObject。
我正在考虑覆盖willSave:
并在其中获取具有相同ID的其他ManagedObjects,但这不会起作用,因为我会在那里遇到无限循环。
有人可以给我一个关于如何从这里进步的提示吗?提前致谢
答案 0 :(得分:1)
你可以使willSave
工作,但忽略所有无效触发器并不是一个很好的代码。
最好有一个管理此功能的类,传入新的数据值和属性id,并允许它进行获取并更新所有获取的对象(并触发保存)。
答案 1 :(得分:1)
我确实会尝试找到一些更好的方法来处理它,因为实际上你不应该把它的核心数据想象成SQL及其触发器。
但实际上你确实可以使用willSave
方法并避免无限循环。看到
NSManagedObject Class Reference将保存方法
如果使用原始访问器更改属性值,则可以避免无限递归,但Core Data不会注意到您所做的更改。
所以基本上在你的willSave方法中,你需要调用一些fetchRequest来获取同一个实体的所有实例,然后循环遍历它们并使用原始访问器进行更新:setPrimitiveValue:forKey:
此外,我建议验证循环中的对象是否被删除(-isDeleted),并且可能是该对象是否是当前对象(通过比较managedObjectIDs)