为啥我需要 2 个或更多 Core Data 模型?

Posted

技术标签:

【中文标题】为啥我需要 2 个或更多 Core Data 模型?【英文标题】:Why might I want 2 or more Core Data models?为什么我需要 2 个或更多 Core Data 模型? 【发布时间】:2012-04-29 18:32:54 【问题描述】:

我很想知道谁在使用多个核心数据模型,以及为什么,有什么好处,我正在开发一个我认为可以从多个模型中受益的应用程序,但我不确定其他好处。

我即将推出的应用程序将适用于 iPad,另一个版本适用于 iPhone,iPad 有 3 个主要内容,iPhone 只有一个也在 iPad 上,因此通过将其隔离为不同的核心数据模型可能会保持我的两个应用程序中的模型会更容易。

虽然我确实有两个实体都需要,但我可以将它们复制过来或拥有一个大模型。

有什么建议吗?

无论如何,这当然不是常见的情况,还有哪些其他情况可能会导致您创建多个 Core Data 模型?

【问题讨论】:

如何添加多个模型类? 【参考方案1】:

有时将不同类型的数据保存在不同的存储中是有意义的。例如,一个像产品目录一样工作的应用程序可能有一个商店作为产品数据库,另一个商店跟踪用户的收藏夹、当前订单和历史记录。这使得在不影响用户数据的情况下更新产品数据库变得相对容易,并且无需复制整个产品数据库即可备份用户数据。

使用多个存储的另一种情况是存储相同类型的数据。例如,基于文档的应用程序通常会为每个文档创建一个单独的存储区——该存储区可能文档。

更新:我在上面写的地址使用单独的 stores,但你问的是使用单独的 models。 Core Data 实际上会让你定义单独的模型,然后在运行时将它们合并在一起,以便在同一个存储(或多个存储)中使用。因此,为了清楚起见,model 定义了实体以及它们之间的关系。 store 是使用模型中定义的模式实际保存数据的地方。您可能会将一个复杂的模型分解为几个较小的模型,以保持简单并在您随着时间的推移修改模型时帮助迁移数据,或者您可能会使用多个模型并将它们分开,因为您计划使用包含不同类型的数据,如上所述。

【讨论】:

通过在模型 A 中添加收藏夹,您不会引用模型 B(产品模型)中的对象吗? @Daniel 是的——你不能在不同的商店中创建对象之间的关系,所以你通常会保存足够的信息(例如产品代码),你可以找到你想要的对象。有关商店和模型之间的重要区别,请参阅我的更新。如果有问题的对象都将保存在同一个存储中,并且如果您需要在它们之间创建关系,那么您应该继续使用一个模型。【参考方案2】:

我建议只使用 1 个核心数据模型。如果将它们分开,您将无法使用 Core Data 的很多特性,例如关系(数据存储中的对象之间)等。即使您现在看不到需要,也可能会来想出一个想法,以便稍后添加到需要它的应用程序中。

您仍然可以为 iPad 和 iPhone 使用相同的核心数据模型,只需忽略您不使用 iPhone 的部分(直到您收到添加缺失部分的功能请求,您很可能会这样做)。然后,您将万事俱备,并且已经有了可用的数据。

只有在极端情况下才值得使用单独的数据模型,例如,如果您要下载现有的只读数据集等。您可以将只读数据集与用户设置/数据分开等等

祝你的应用好运!

【讨论】:

指出明显的是,当您使用多个商店时,您当然可以使用关系;您只是无法在不同商店中的对象之间创建关系。我知道这就是你的意思,但如上所述,情况听起来比实际情况更糟。 所以就我而言,我确实有一些实体要分享,媒体就是其中之一。我有一个 MediaVideo、MediaImage 和 MediaFile,它们保存远程 uri 并处理实际文件的本地缓存,如果我理解正确,我想重用这些,并且不能对多个模型这样做 在“Core Data 的许多特性”中,您还会包含哪些其他特性? IMO,您可以拥有多个商店并相当无缝地一起访问它们,这本身就是 Core Data 的一个巨大特性。 @DaveWood:今天有点晚了,但谢谢你。您刚刚帮助我做出了决定,我现在将使用一个数据模型。 值得注意的是,如果您使用多个数据模型,则在更新其中一个时似乎无法进行迁移,因为应用程序使用的结果模型是从所有模型中合并的。

以上是关于为啥我需要 2 个或更多 Core Data 模型?的主要内容,如果未能解决你的问题,请参考以下文章

使用具有 2 个或更多水平的因素运行(混合模型)回归时,错误“对比只能应用于具有 2 个或更多水平的因素”

为啥使用 Core Data 的人想要在同一个托管对象模型中使用多个持久存储?

在哪里可以找到有关 Core Data 对象模型版本控制和迁移的更多详细信息?

使用 lm 构建回归模型时出错(`对比<-`中的错误(`*tmp*`...对比只能应用于具有2个或更多级别的因素)[重复]

上下文模式?为啥 Core Data 需要它?

为啥 Core Data 插入需要越来越长的时间?