Realm - 在迁移块中从Realm数据库删除对象

9

我需要在迁移过程中从域中删除对象。

我有一个包含以下内容的AccountManager:

func logOut() {
    let realm = try! Realm()
    try! realm.write {
        realm.delete(realm.objects(Account.self))
        realm.delete(realm.objects(Address.self))
        ... // Other deletions
    }
}

但是每当我在迁移块中使用logOut()函数时,它总是失败。
    let config = Realm.Configuration(
        schemaVersion: 11,
        migrationBlock: { migration, oldSchemaVersion in
            if (oldSchemaVersion < 11) {
                // Delete objects from realm
                AccountManager().logOut() // DOESN'T WORK
            }
    })

    Realm.Configuration.defaultConfiguration = config

我绝对需要用户在此更新后重新登录 - 有没有办法在迁移块中执行这些删除操作?

2个回答

18
你可以使用Migration.deleteData(forType typeName: String)来替代Realm.delete(_:),方法如下。
Realm.Configuration(schemaVersion: 11, migrationBlock: { migration, oldSchemaVersion in
    if oldSchemaVersion < 11
        migration.deleteData(forType: Account.className)
        migration.deleteData(forType: Address.className)
        ...

嗨,请查看我的关于 Realm 迁移的问题,链接为 https://stackoverflow.com/questions/59855380/how-can-i-replace-a-listobjects-with-object-field-in-realm - milad salimi

14
你可以告诉 Realm 在需要迁移时进行删除。
Realm.Configuration.defaultConfiguration = Realm.Configuration(
    schemaVersion: 10,
    migrationBlock: { migration, oldSchemaVersion in


    },
    deleteRealmIfMigrationNeeded: true
)

3
我能否指定仅在从版本10迁移到11时应用该领域删除? - nth
我从未尝试过那个,我猜你必须编写自己的迁移代码。查看这个答案https://dev59.com/_5zha4cB1Zd3GeqPAiaI#40467810 - wint
仅在从特定版本迁移时删除realm,请查看https://github.com/realm/realm-js/issues/502#issuecomment-228058951 - haart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接