2016-07-04 61 views
9

Sto solo testando alcune configurazioni con Realm e quindi ho aggiunto ed eliminato variabili ed elenchi dalle mie classi di reame. Dato che sto solo testando, non voglio passare attraverso il processo di migrazione - non ho nemmeno dati che vengano effettuati per continuità.Come evitare la migrazione in RealmSwift

C'è un modo per aggirare la migrazione richiesta automaticamente da Realm?

risposta

19

Esistono due modi per ignorare l'errore di migrazione indipendentemente dalle modifiche dello schema.

  1. Utilizzare deleteRealmIfMigrationNeeded proprietà. Se è true, ricrea il file Ream con lo schema fornito se è richiesta una migrazione.

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

  2. versione dello schema di incremento ogni lancio. Il regno ha una funzione di migrazione automatica. Se non è necessario migrare i dati esistenti, è possibile semplicemente incrementare la versione dello schema. Lo schema verrà modificato automaticamente da Realm.

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

Grande roba. Ho lasciato che realm = prova! Realm() definito prima di viewDidLoad. Dove posso inserire il codice suggerito per farlo funzionare prima che l'app si arresti in modo anomalo perché raggiunge la definizione del reame? – kangarooChris

+0

Si consiglia di inserire il codice in "didFinishLaunchingWithOptions" in AppDelegate. Se metti 'let realm = prova! Realm() 'come variabile membro di ViewController, che viene chiamata prima di' didFinishLaunchingWithOptions'. Quindi dovrebbe essere 'pig var realm = prova! Realm() ' –

+0

Ho testato entrambe le soluzioni ed entrambe funzionano. Grazie mille. – kangarooChris

8

In Swift 3

migrazione nel regno può essere facilmente evitare inserendo questo codice all'interno metodo "didFinishLaunchingWithOptions" in classe AppDelegate.

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

Questo eliminerà il database di reame se è richiesta la migrazione con una nuova configurazione.

+0

Ha funzionato come un incantesimo per me! Grazie! – mourodrigo

+0

Ma perderete i dati? – Eenvincible

+0

sì cancellerà lo spazio di memoria e ne aggiungerà uno nuovo. –

0

Swift 4

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