iOS CoreData提交子事务但取消主事务

时间:2017-09-12 06:30:22

标签: ios swift core-data transactions

我有以下核心数据模型:

A - > B(1比1)

A - > C(1到n)

我创建了一个视图控制器VC来编辑A实例的任何属性。在该VC中我想添加创建C的新实例的可能性,以便用户可以在必要时动态添加新的C。现在我只是将这些添加到viewContext并保存它。这有效,但有一点点。一旦我将新C保存到上下文中,我就无法回滚之前对A所做的任何更改。

所以我研究了this tutorial并发现我认为分开的任何更改都应该应用在自己的子上下文中。我理解这一点,但我仍有一个问题:教程说,对childContext所做的任何更改都会在保存时被推送到其父级,但除非保存parentContext,否则它永远不会写入磁盘。现在,如果我不想保存父上下文,因为用户点击取消按钮以回滚其他更改,我怎么能保留新的C?

1 个答案:

答案 0 :(得分:0)

不要将数据直接保存到实体A,B或C的ManagedObject(CoreData对象),而应创建一个应根据用户输入或任何数据源更新的模型。您需要为A,B或C创建托管对象,并在用户确认保存数据时为各个属性设置值。这意味着如果用户点击取消,数据将不会保存到CoreData,但您将能够在模型对象生命周期内找到模型中的先前数据。