我有以下核心数据模型:
A -> B(1 比 1)
A -> C(1 到 n)
我创建了一个 View Controller VC 来编辑 A 实例的任何属性。在该 VC 中,我想添加创建 C 的新实例的可能性,以便用户可以在必要时动态添加新的 C。现在我只需将这些添加到 viewContext 并保存它即可做到这一点。这可行,但有一点困难。一旦我将新的 C 保存到上下文中,我就无法回滚之前对 A 所做的任何更改。
所以我学习了this tutorial并发现我认为单独的任何更改都应该应用于其自己的子上下文中。我明白这一点,但我仍然有一个问题:教程说对 childContext 所做的任何更改都会在保存时推送到其父级,但除非我保存parentContext,否则它永远不会写入磁盘。现在,如果我不想保存父上下文,因为用户点击取消按钮来回滚其他更改,我怎样才能保留新的 Cs?
最佳答案
不要将数据直接保存到实体 A、B 或 C 的 ManagedObject(CoreData 对象),而是应该创建一个模型,并根据用户输入或任何数据源更新该模型。当用户确认保存数据时,您需要为A、B或C创建托管对象并为各自的属性设置值。这意味着如果用户点击取消,数据将不会保存到 CoreData,但您将能够在整个模型对象生命周期中找到模型中以前的数据。
关于iOS CoreData 提交子事务但取消主事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169402/