在运行时查找 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 模型的实体的主要内容,如果未能解决你的问题,请参考以下文章