【发布时间】:2020-06-27 17:00:27
【问题描述】:
我之前创建了一个将数据保存到数据库的 iOS 应用程序。我已经从应用程序中复制了数据,现在有三个文件:
MyData.sqlite、MyData.sqlite-shm 和 MyData.sqlite-wal
我正在尝试在 Xcode 中创建一个命令行实用程序,它将访问这些数据库中的数据。我已将 CoreData 添加到命令行实用程序项目中,并且能够创建一个新数据库。我想要的是加载我从应用程序导出的数据库。
我从某人那里找到了一个先前的问题: Migrate Core Data database from one app to another
但是,他们的回答对我不起作用。这一行:
let storeUrl = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask).first!.appendingPathComponent(databaseName + ".sqlite")
给出这个错误:
expression produced error: error: /var/folders/cc/r_54b90515v_m6t41vg9lg000000gp/T/expr14-6084fa..swift:1:65: error: use of undeclared type 'Foundation'
Swift._DebuggerSupport.stringForPrintObject(Swift.UnsafePointer<Foundation.URL>(bitPattern: 0x1004fc2f0)!.pointee)
我觉得我一定错过了这个问题的简单答案。有没有一种简单的方法可以将 Core Data 数据库信息从一个应用程序移植到另一个应用程序?
编辑:感谢下面的 Lou Franco,我取得了一些进展。我现在有:
var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "MyData")
let storeUrl = URL(fileURLWithPath: "/Path/To/Data/MyData.sqlite")
container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: storeUrl)]
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
但是我现在得到了"Persistent store migration failed, missing mapping model."总结的一大堆输出
我最初希望通过使用当前核心数据设置容器,我可以以某种方式让程序知道它正在加载什么(数据模型是相同的),但无论如何它似乎都失败了。我在错误消息中注意到:
NSInferMappingModelAutomaticallyOption = 1;
NSMigratePersistentStoresAutomaticallyOption = 1;
有没有办法让程序知道它正在加载的数据符合我已经设置的核心数据模型?它只需要从文件中加载数据。
【问题讨论】:
标签: ios swift xcode core-data core-data-migration