从众多实体中恢复一个获取的实体——核心数据

Posted

技术标签:

【中文标题】从众多实体中恢复一个获取的实体——核心数据【英文标题】:Restore one fetched entity out of many -- Core Data 【发布时间】:2011-04-23 04:05:31 【问题描述】:

这个问题涉及我对如何使用核心数据撤消管理器以及如何将 NSManagedObject 恢复到编辑完成之前的状态缺乏了解。

我只是在学习如何使用 Core Data。我用动态访问器设置了我的 NSManagedObject 类。我执行一个返回多个 NSManagedObject 实体结果的提取。来自这些实体结果(名字、姓氏)中的每一个的内容都被放入表格视图中,然后用户从表格中选择一个进行详细查看,然后进行编辑。

详细视图控制器接收一个指向所选 NSManagedObject 实体的指针。当用户编辑字段时,NSManagedObject 实体中的相应属性值也会更新。这似乎是管理这些更改的最干净的方法。

现在,我想提供一个取消编辑功能,以回滚到该实体的数据库中的内容,而不是使用保存提交更改。我真的只想恢复一个实体,而不是执行整个重新获取。

我尝试了回滚并尝试了 NSUndoManager(使用 beginUndoGrouping 和 endUndoGrouping),但这不起作用。我想我不明白回滚到底应该做什么。

但无论如何,我仍然希望仅在单个实体中恢复属性值(采用惰性方法仅获取所需的内容,即一个实体),以便我的详细视图控制器可以重新填充其视图正确的信息。现在它正在使用 NSManagedObject 实体值,其中包含已取消的已编辑值。

我想我可以通过创建 NSManagedObject 的副本来开始编辑过程。如果按下取消编辑按钮,我可以将其复制回原件。 (我什至可以通过移动指针将原件替换为副本。但由于指针实际上已通过多个对象传递,我不确定如何管理副本上的保留编号。)

还有人有其他建议吗?

谢谢

【问题讨论】:

【参考方案1】:

使用rollback 应该可以实现您想要的,但我不确定它不能实现什么。这可能是一个实现细节错误。

您可以通过调用上下文的updatedObjects 找到已更新但尚未保存的特定托管对象。

【讨论】:

以上是关于从众多实体中恢复一个获取的实体——核心数据的主要内容,如果未能解决你的问题,请参考以下文章

如何从核心数据中仅获取第一个实体?

从具有实体之间关系的核心数据中获取数据[重复]

从同一个核心数据数据库中获取多个不同的实体

使用魔法记录从核心数据中获取关系实体

核心数据:从相关实体中获取

Swift 从实体(核心数据)获取特定的 NSManagedObject