核心数据:具有多个上下文的独立持久存储与具有单个上下文的独立持久存储

Posted

技术标签:

【中文标题】核心数据:具有多个上下文的独立持久存储与具有单个上下文的独立持久存储【英文标题】:Core Data: Separate Persistent Stores with Multiple Contexts vs. Separate Persistent Stores with Single Context 【发布时间】:2012-03-14 17:01:41 【问题描述】:

前段时间我问了一个关于 SQLite 迁移到 Core Data 的问题,得到的答案是根据我对“只读”存储和“自定义存储”的需要保持持久存储分开:

Updating Application to use Core Data from previous double SQLite only persistent store

我正在开始开发此应用程序,目前我计划创建 2 个单独的上下文,因为我预计只读卡对象模型在未来版本中保持不变,而自定义模型可能会改变。这样,我只需要对自定义对象模型进行版本控制,并继续使用相同的 ole 只读存储发布应用程序。

这是一个明智的选择吗?如果是这样,我应该注意哪些障碍?如果没有,有什么更好的选择?

【问题讨论】:

可能有帮助,也可能没有帮助,但我最近看到了一个很好的例子splitting persistent stores。 【参考方案1】:

只要两个模型中的实体不相互冲突,您就可以在同一上下文中同时使用这两个模型。您可以使用+modelByMergingModels: 方法在运行时从两个或多个模型创建单个模型。使用该新模型来初始化您的持久存储协调器,并将该 PSC 添加到您的上下文中。

我相信您可以使您的代码在单独的托管对象上下文中正常工作,但 Core Data 的优点之一是,如果您正确设置它,它将管理查找对象的详细信息为你。对只读数据和用户数据使用单一上下文似乎是朝着保持代码简单迈出的积极一步。

【讨论】:

您能否通过确保“两个模型不相互冲突”来澄清您的意思? @5StringRyan 我的意思是他们都不会尝试定义具有相同名称的实体。如果您在一个模型中有一个名为 Product 的实体,那么在另一个模型中拥有一个具有相同名称的不同实体可能是个坏主意。 如果使用+modelByMergingModels:***.com/questions/10940545/…,轻迁移将不起作用

以上是关于核心数据:具有多个上下文的独立持久存储与具有单个上下文的独立持久存储的主要内容,如果未能解决你的问题,请参考以下文章

具有单个持久存储协调器的多个数据模型

具有内存存储的核心数据

具有多个相似实体或单个大型实体的核心数据

将对象从多个存储保存到单个持久存储

排查核心数据死锁?

WatchKit 核心数据同步