一个托管对象上下文的两个持久存储 - 可能吗?

Posted

技术标签:

【中文标题】一个托管对象上下文的两个持久存储 - 可能吗?【英文标题】:Two persistent stores for one managed object context - possible? 【发布时间】:2011-03-22 23:02:39 【问题描述】:

我有一个相当复杂的数据模型,大约有 10 个实体。有些需要存储到磁盘上,而另一些只需要在应用程序运行时在内存中可用。是否可以为同一个托管对象上下文使用两个持久存储来实现这一点,还是应该相应地分离我的数据模型?

【问题讨论】:

【参考方案1】:

是的,您的 NSManagedObjectContext 使用 NSPersistentStoreCoordinator 来确定特定模型应该使用哪个存储。通过设置托管对象上下文的持久存储协调器,您可以定义一个自定义映射,该映射使用多个不同类型的持久存储。

http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdBasics.html#//apple_ref/doc/uid/TP40001650-SW4

【讨论】:

+1 要扩展,您将使用配置并将需要存储在磁盘中的实体放在一种配置中,而将内存中的实体放在另一种配置中。创建商店时,将适当的配置分配给适当的商店。请注意,您不能跨商店使用直接关系,而必须依赖获取的关系。【参考方案2】:

您可以使用 TechZen 提到的配置:

    在托管对象模型编辑器(.xcdatamodel 文件)中创建配置; 在代码中将多个持久存储添加到持久存储协调器,并提供适当的配置名称。

详情请查看我的其他回答here。

【讨论】:

以上是关于一个托管对象上下文的两个持久存储 - 可能吗?的主要内容,如果未能解决你的问题,请参考以下文章

托管对象上下文是事务日志?

托管对象上下文未保存到持久存储

其他线程可以间接访问在自己的线程中运行的托管对象上下文吗?

区分从内存中托管对象上下文和持久存储中获取的对象

两个上下文,1 个持久存储:重复获取的条目

如果您想通过 Core Data 使用多个实体,您需要为每个实体提供一个托管对象上下文吗?