为不相关的实体集使用和添加多个 Core Data 模型文件

Posted

技术标签:

【中文标题】为不相关的实体集使用和添加多个 Core Data 模型文件【英文标题】:Using and adding multiple Core Data model files for unrelated sets of entities 【发布时间】:2014-03-26 07:46:48 【问题描述】:

这里是学生飞行员。我相信我可以有两个托管对象模型(单独的 .xcdatamodeld 文件)代表两组不相关的实体/属性/关系(例如,用于员工/部门的模型 1 和用于产品/客户的模型 2)并通过加载它们

+(NSManagedObjectModel *)modelByMergingModels:

轻量级迁移将适用于每个模型。 (对吗?)我只想使用一个商店,建议使用它以提高效率(并且因为它将在 iCloud() 中。

但是,如果我需要一组新的实体,我是否可以简单地添加一个新的模型文件来表示新的实体/属性集(与前两个模型无关,例如发票/付款) ? Core Data 的轻量级迁移在看到新实体时会自动创建这些实体吗?

【问题讨论】:

应该的。创建一个小测试项目并尝试一下。 【参考方案1】:

是的,这行得通。然而,它似乎代表了不必要的复杂性。当一个人可以完成这项工作时,您正在使用多个模型。当然,它会起作用,但为什么要让事情变得比必要的更难呢?通过将所有内容放在一个持久性存储文件中,您实际上并没有将数据分开,因此使用多个模型并没有为您带来任何好处。

【讨论】:

分离模型对我来说似乎更干净,因为当我想专注于一组特定的相关实体时,我不会有各种不相关的实体和属性盯着我看。在我的示例中,如果我正在查看例如 Invoices 的关系,我不会关心与 Persons 相关的所有事情。只有一个文件,我必须在所有相关项目上添加一个前缀,以便将它们排序在一起。 以哲学设计纯度的名义看起来仍然是不必要的复杂化,但是嘿,它会起作用的。 在其中一个模型中,如果我添加一个具有新实体的新模型版本,请将其设置为当前版本,清理、构建和运行,然后我得到“找不到源模型店铺。”其他 SO 线程说要使用 NSString *path = [[NSBundle mainBundle] pathForResource:@"Foo" ofType:@"momd"]; NSURL *momURL = [NSURL fileURLWithPath:path]; managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:momURL]; - 但如果有多个模型(没有一个文件),这不起作用。帮忙? 更新...我也尝试使用 pathForResource(两次)获取两个模型,然后使用 modelByMergingModels:,但这没有帮助。 当然有多个文件,每个模型一个,如果你想在同一个持久存储中使用这两个文件,你需要分别加载它们然后合并它们。如果您在合并它们时遇到问题,请发布一个新问题。但首先,请考虑一下我所说的关于增加复杂性的内容:您在这里根本没有帮助自己,而是让事情变得比必要的更难。

以上是关于为不相关的实体集使用和添加多个 Core Data 模型文件的主要内容,如果未能解决你的问题,请参考以下文章

iOS Core Data - 将相关数据添加到实体

使用 NSPredicate 遍历多个 Core Data 对象

如何在 Core Data 中为多个对象(相同实体类型)生成数组实例?

如何使用 Core Data 中多个实体的属性获取属性值?

如何在 Swift 中使用 UISearchBar 和 NSFetchedResultsController 在 Core Data 上一次获取多个实体?

SwiftUI Core Data 删除实体的相关数据