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

Finding the entities of a CoreData model at runtime

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

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

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

到目前为止,我一直在创建实体,然后为每个实体编写一个 class 来保存和获取数据。它运行良好,符合预期。但是,如果我继续这样做,我最终会得到大约 50 个不同的实体及其关联的 class 文件(请注意,虽然有些实体使用一对多关系,但大多数不使用)。

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

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

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

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

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

注意 NSManagedObjectModel 有一个 entities 属性 所以你可以使用:

for myEntity in myModel.entities { ... }

而不是使用 entitiesByName.