2016-07-04 7 views
9

Ich teste gerade einige Konfigurationen mit Realm und deshalb habe ich Variablen und Listen aus meinen Realm-Klassen hinzugefügt und gelöscht. Da ich gerade teste, möchte ich den Migrationsprozess nicht durchgehen - ich habe auch keine Daten, die auf Kontinuität angelegt sind.Wie kann ich die Migration in RealmSwift vermeiden

Gibt es eine Möglichkeit, die Migration zu umgehen, die von Realm automatisch angefordert wird?

Antwort

19

Es gibt zwei Möglichkeiten, Migrationsfehler unabhängig von Schemaänderungen zu überspringen.

  1. Verwenden Sie deleteRealmIfMigrationNeeded Eigenschaft. Wenn es true ist, erstellen Sie die Realm-Datei mit dem bereitgestellten Schema neu, wenn eine Migration erforderlich ist.

    let config = Realm.Configuration(deleteRealmIfMigrationNeeded: true) 
    Realm.Configuration.defaultConfiguration = config 
    
    let realm = try! Realm() 
    ... 
    

  2. Erhöhungsschritte Schemaversion jeder Start. Realm verfügt über eine automatische Migrationsfunktion. Wenn Sie vorhandene Daten nicht migrieren müssen, können Sie einfach die Schemaversion erhöhen. Schema wird automatisch von Realm geändert.

    let config = Realm.Configuration(schemaVersion: try! schemaVersionAtURL(Realm.Configuration.defaultConfiguration.fileURL!) + 1) 
    Realm.Configuration.defaultConfiguration = config 
    
    let realm = try! Realm() 
    ... 
    
+0

Great stuff. Ich habe Realm = versuchen lassen! Realm() definiert vor viewDidLoad. Wo kann ich den vorgeschlagenen Code einfügen, damit dies funktioniert, bevor die App abstürzt, weil die Realmdefinition erreicht wird? – kangarooChris

+0

Wir empfehlen, den Code in AppDelegate auf 'didFinishLaunchingWithOptions' zu setzen. Wenn du 'let realm = try! Realm() 'als ViewController-Membervariable, die vor 'didFinishLaunchingWithOptions' aufgerufen wird. Also sollte es 'faul var realm = versuchen! Realm() ' –

+0

Ich testete beide Lösungen und beide funktionieren. Vielen Dank. – kangarooChris

8

In Swift 3

Migration in Realm können, indem diesen Code innerhalb "didFinishLaunchingWithOptions" -Methode in AppDelegate Klasse leicht zu vermeiden.

var config = Realm.Configuration() 
config.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = config 

Dies wird die Realm-Datenbank löschen, wenn die Migration mit einem neuen Setup erforderlich ist.

+0

Arbeitete wie ein Charme für mich! Vielen Dank! – mourodrigo

+0

Aber Sie werden Daten verlieren? – Eenvincible

+0

ja es wird Realm Storage löschen und neue hinzufügen. –

0

Swift 4

var config = Realm.Configuration() 
config.deleteRealmIfMigrationNeeded = true 
Realm.Configuration.defaultConfiguration = config