领域:更新预先填充的数据库,同时保留特定字段的数据

时间:2018-04-08 06:16:24

标签: ios swift realm database-migration realm-migration

我为我的应用程序准备了一个预先填充的数据库。偶尔我会用新数据更新这个预先填充的数据库。 问题是该对象包含一个名为"已完成"的布尔字段。默认情况下,此字段为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解决这个问题,但我更喜欢上述解决方案。

提前谢谢!

0 个答案:

没有答案