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

标签 swift macos core-data nsentitydescription nsmanagedobjectmodel

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

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

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

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

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

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

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

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

最佳答案

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

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

for myEntity in myModel.entities { ... }

而不是使用 entitiesByName

关于swift - 在运行时查找 CoreData 模型的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44479611/

相关文章:

objective-c - osx - 如何以编程方式删除具有提升权限的文件?

ios - 带有 iCloud 的 CoreData 驱动应用程序中带有 NSSortDescriptor 和 NSFetchedResultsController 的自定义部分

cocoa - 核心数据实体中的对象数组?

json - 来自字符串的通用类型

ios - 双击时如何切换到前置摄像头(SWIFT)

ios - 测试设备上的结果始终为 100

ios - 有谁知道如何实现在表格 View 单元格的搜索栏中显示电话簿中的联系人列表?

macos - brew升级后vim坏了

html - 使用 TextEdit (MAC) 将外部样式表 (CSS) 链接到 HTML5 文件

ios - 如何在 CoreData 中使用 NSPredicate 进行排序和限制?