领域 - 在迁移块中从领域中删除对象

nth*_*nth 6 realm swift

我需要在迁移期间从领域中删除对象.

我有一个AccountManager,其中包含:

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

但每当我在迁移块中使用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
Run Code Online (Sandbox Code Playgroud)

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

win*_*int 10

您可以告诉Realm在需要迁移时删除.

Realm.Configuration.defaultConfiguration = Realm.Configuration(
    schemaVersion: 10,
    migrationBlock: { migration, oldSchemaVersion in


    },
    deleteRealmIfMigrationNeeded: true
)
Run Code Online (Sandbox Code Playgroud)

  • 有什么方法可以指定仅当从版本10迁移到版本11时才应用此领域删除吗? (2认同)

kis*_*umi 9

您可以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)
        ...
Run Code Online (Sandbox Code Playgroud)