我为我的应用程序准备了一个预先填充的数据库。偶尔我会用新数据更新这个预先填充的数据库。 问题是该对象包含一个名为"已完成"的布尔字段。默认情况下,此字段为false。当用户完成某个任务时,对象的布尔字段变为真。 我希望在迁移到新的预填充数据库时找到一种方法,以保持该布尔字段与以前相同。
这是我到目前为止的代码
// copy over old data files
let defaultURL = Realm.Configuration.defaultConfiguration.fileURL!
let defaultParentURL = defaultURL.deletingLastPathComponent()
if let v0URL = bundleURL("database") {
//Delete if there's a file already
do {
try FileManager.default.removeItem(at: defaultURL)
print("Item Removed")
} catch {
print("error removing seeds: \(error)")
}
//Copy the database file to the directory
do {
try FileManager.default.copyItem(at: v0URL, to: defaultURL)
print("Item Copied")
}catch {
print("error copying seeds: \(error)")
}
}
// define a migration block
// you can define this inline, but we will reuse this to migrate realm files from multiple versions
// to the most current version of our data model
let migrationBlock: MigrationBlock = { migration, oldSchemaVersion in
migration.enumerateObjects(ofType: BookModel.className()) { oldObject, newObject in
// keep the old boolean completed value and assign it to the new one
let completed = oldObject!["completed"] as! Bool
newObject!["completed"] = completed
print(completed)
}
print("Migration complete.")
}
Realm.Configuration.defaultConfiguration = Realm.Configuration(schemaVersion: 5, migrationBlock: migrationBlock)
let realm = try! Realm()
return true
我怀疑我的代码不起作用,因为在迁移发生之前,我已经删除了我之前的数据库(其中包含用户的已完成值)。但是如何在没有删除副本的情况下用新的数据库替换以前的数据库?
我可以使用userDefaults解决这个问题,但我更喜欢上述解决方案。
提前谢谢!