我有以下核心数据模型:的iOS CoreData提交子交易,但取消主事务
A - > B(1:1)
A - > C(1至n)
我创建了一个视图控制器VC来编辑A实例的任何属性。在该VC中,我想添加创建C的新实例的可能性,以便用户可以根据需要随时添加新的Cs。现在我只需将这些添加到viewContext并保存即可。这有效,但有一点小生意。一旦我将新C保存到上下文中,我就无法回滚之前对A所做的任何更改。
因此,我研究了this tutorial,发现我认为单独的任何更改应该应用于其自己的子上下文中。我明白,但我仍然有一个问题:本教程指出,对childContext所做的任何更改都会在保存时推送到它的父级,但除非保存parentContext,否则它将永远不会写入磁盘。现在,如果我不想保存父上下文,因为用户点击取消按钮以回滚其他更改,那么我如何仍然保留新的Cs?
现在我使用rollback() - 方法来取消所有更改。但是,这也可能影响我实际想要保持的变化,例如,新的Cs。为我的每个核心数据实体创建附加模型似乎非常不方便。这是实现我想要的唯一途径吗? – Martin
在这种情况下,@Martin可以创建一个子父管理对象上下文,该子父管理对象上下文的父级是主上下文,对子管理对象上下文进行所有更改。当子托管对象上下文保存其更改时,会将其推送到与其链接的父托管对象上下文。直到父管理对象上下文执行保存操作,将其更改推送到其持久存储协调器,这些更改才会推送到持久存储协调器。你可以按照下面的链接https://cocoacasts.com/the-elegance-of-disposable-managed-object-contexts/。 –