我正在尝试将 CoreData 模型放入 Swift 包中,以从我的主代码库中提取我的模型代码/类。
我已执行以下操作来重新创建我遇到的问题:
现在 - 当我尝试在 Xcode 中打开 Model.xcdatamodelId 文件时,它只向我显示一个“版本”图标(参见屏幕截图),而在项目或框架中创建核心数据模型文件将允许我编辑模型。
第二个/后续问题是我如何像平常一样扩展代码宝石模型文件?我将如何加载该模型定义(通常我会使用捆绑包 ID 和模型文件名)
我尝试将模型文件添加到 Package.swift 文件的资源数组中(使用 .process 和使用 .copy),如本页所述:https://developer.apple.com/documentation/swift_packages/bundling_resources_with_a_swift_package
或者更一般地说,这可能吗? (这篇文章https://ishabazz.dev/blog/2020/7/5/using-core-data-with-swift-package-manager似乎暗示像这样打包核心数据模型是可能的)
(我使用的是 Xcode 12.4)
您需要在普通的 Xcode 项目中创建 Core Data 模型,然后您可以创建包并将模型拖到其中。 (如果你仔细看的话,这也是链接文章中所做的,尽管没有明确描述)。
我相信最好的办法是手动为您的实体生成源代码文件并将它们添加到您的包中。您使用
Bundle
加载模型,但使用 Bundle.main
而不是
Bundle.module
如果您有包并且 .xcdatamodel 在包中,只需使用:
let mom: NSManagedObjectModel
if let model = NSManagedObjectModel.mergedModel(from: [BundleReference.bundle]) {
mom = model
} else {
mom = NSManagedObjectModel()
print("💥 CoreData Error: Failed to load managed object model. Initializing with an empty model.")
}
container = NSPersistentContainer(name: "YourModelName", managedObjectModel: mom)