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

标签 ios swift core-data transactions

我有以下核心数据模型:

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/

相关文章:

swift - 在不考虑泛型类型约束的情况下检查泛型类的类型

swift - 快速向下滑动时的搜索栏

xcode - Textview 插入符号/光标在 ios8 底部被截断

iphone - 如何在达到 50 个条目限制时自动删除最旧的核心数据条目?

ios - SpriteKit 滚动底部在循环时有间隙

ios - 如何加密/解密我的 CoreData(sqlite)?我可以使用 SQLCipher 吗?

ios - 设置自定义开关

iphone - 将新字符串添加到 iOS 中的可本地化字符串文件

iOS 检索和排序具有关系的核心数据实体

iphone - 不同实体的多个 NSFetchedResultControllers?