在运行时查找 CoreData 模型的实体

Posted

技术标签:

【中文标题】在运行时查找 CoreData 模型的实体【英文标题】:Finding the entities of a CoreData model at runtime 【发布时间】:2017-06-11 01:34:43 【问题描述】:

我在 SWIFT 的 Xcode (8.3.2) 中开发了一个 macOS 应用程序。

我有一个包含多个实体和一个标识符 (myidentifier) 的 CoreData 模型。

我希望能够在运行时以编程方式识别模型的实体,以便我可以遍历实体并根据 JSON 文件中的数据存储来自一系列 JSON 文件的数据。

迄今为止,我一直在创建实体,然后为每个实体编写一个类来保存和获取数据。它工作正常且符合预期。但是,如果我继续这样下去,我最终会得到大约 50 个不同的实体及其关联的类文件(请注意,有些实体使用一对多关系,但大多数不使用)。

我想创建一个类来枚举模型的众多实体并存储相关数据(以及相关的获取例程)。

我还应该注意,我正在为每个实体使用 NSManagedObject 子类。

如何获得对我用于应用程序的模型的 NSManagedObjectModel 引用?我似乎找不到合适的机制来允许我这样做。我可以使用模型标识符来执行此操作吗?

我的想法是,如果我可以使用 entityByName,我可以利用生成的 [String: NSEntityDescription] 来访问我的实体并根据需要进行枚举。

【问题讨论】:

【参考方案1】:

您可以使用mergedModel(from bundles: [Bundle]?)(请参阅documentation here,指定Bundle.main 来获取主包。或者,您的NSManagedObjectContext 将引用persistentStoreCoordinator,它本身将引用managedObjectModel .

请注意,NSManagedObjectModel 有一个 entities 属性,因此您可以使用:

for myEntity in myModel.entities  ... 

而不是使用entitiesByName

【讨论】:

非常感谢。我使用以下方法解决了它:' let contextTCCEDJ = self.container.viewContext let test = contextTCCEDJ.persistentStoreCoordinator?.managedObjectModel'

以上是关于在运行时查找 CoreData 模型的实体的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:不能轻量级迁移删除实体“没有这样的表”

从实体中删除属性后迁移 CoreData 时出错

更新CoreData模型版本时如何为实体的新属性设置默认值

为啥更改实体的属性时会删除我的 CoreData 信息?

在 iOS 中对来自 Core Data 的实体的 NSArray 进行快速枚举时出现运行时错误

当您知道没有保存实体时如何处理 CoreData 中的获取请求