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

时间:2017-06-11 01:34:44

标签: swift macos core-data nsentitydescription nsmanagedobjectmodel

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

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

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

到目前为止,我一直在创建实体,然后为每个实体编写一个类来保存和获取数据。它正如预期的那样完美地工作。但是,如果我继续这样做,我将最终得到大约50个不同的实体及其相关的类文件(请注意,有些实体使用一对多的关系,大多数没有)。

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

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

如何获取对我正在为应用程序使用的模型的NSManagedObjectModel引用?我似乎无法找到允许我这样做的正确机制。我可以使用模型标识符吗?

我的想法是,如果我可以使用entitiesByName,我可以使用结果[String:NSEntityDescription]然后访问我的实体并根据需要进行枚举。

1 个答案:

答案 0 :(得分:1)

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

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

for myEntity in myModel.entities { ... }

而不是使用entitiesByName