如何在核心数据中保存单个实体

Posted

技术标签:

【中文标题】如何在核心数据中保存单个实体【英文标题】:How to save individual entities in Core data 【发布时间】:2012-03-14 12:06:06 【问题描述】:

我在核心数据中有 4 个实体。假设实体 A、B、C 和 D。这些是关系的方式:

A > B

B C

B > D

问题是: 我的应用程序中有很多屏幕。现在,假设在第一个屏幕中,我对实体 A 进行了更改,并且目前我没有在托管对象上下文上调用 save,(我只有一个托管对象上下文)。现在我对实体 B 进行了更改,现在我想将对实体 B 所做的更改保存到持久存储中,但不希望我对 A 所做的更改保存到现在。这是我的应用程序中的要求。所以我想稍后保存实体 A,或者可能根本不保存它。

简而言之,问题是,如何将实体单独保存到持久存储中?我对此进行了很多思考,但无法找到一种方法来做到这一点。我尝试使用核心数据提供的 NSUndoManager,但它让事情变得非常复杂。

有什么想法吗?

【问题讨论】:

【参考方案1】:

让每个 viewContoller 使用它自己的一个单独的本地托管对象上下文。然后将属性parentContext(NSManagedObjectContext 的属性)相应地设置为主上下文(具有持久存储的那个),或者视图控制器层次结构中的另一个上下文。查看 WWDC2011 ios5 Core Data 视频,其中讨论了父/子 managedObjectContexts。

虽然听起来很混乱,但您可能希望重新设计。

【讨论】:

除了 Gobot 的回答之外,此链接可能会有所帮助:cimgf.com/2011/10/14/parent-watching-its-child 我已经看过这些视频了。父子关系仅支持 iOS 5.0 及更高版本。我的目标是上面的 iOS 4.3。必须有一些我们遗漏的东西。这应该是一个普遍的要求,而且绝对应该是可能的。 在 4.3 中您仍然可以拥有多个 MOC。但是您必须为每个分配相同的 NSPersistentStoreCoordinator。然后,在需要时,确保其他上下文重新获取更新的数据,无论是手动还是通过通知。 为此 +1。为我要单独处理的每个视图控制器拥有一个托管对象上下文。并将它们分配给同一个视图控制器。

以上是关于如何在核心数据中保存单个实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中保存生日日期?

在 plist 中保存单个 NSMutableDictionary

如何在 Swift 应用程序中保存本地数据?

如何以编程方式在 iOS 5 中保存生日日期

如何在 TabView SwiftUI 中保存视图的列表状态

如何从图像集合中保存视频文件?