nth nth - 1 month ago 22
Swift Question

Realm - Delete objects from realm in migration block

I need to delete objects from a realm during a migration.

I have an AccountManager which contains :

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


But whenever I use the logOut() function in a migration block it just fails.

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


I absolutely need users to relog after this update - Is there any way I could perform these deletions in a migration block ?

Answer

You can tell Realm to delete when migration needed.

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


        },
        deleteRealmIfMigrationNeeded: true
    )