2015-12-14 12 views
8

ho aggiunto nuovo attributo array per la RLMObject eSwift Realm Proprietà '*' è stato aggiunto alla ultimo oggetto modello di migrazione

public class Student: RLMObject { 
    dynamic var id = 0 
    dynamic var name = "" 
    dynamic var resultList = RLMArray(objectClassName:Result.className()) 
} 

public class Result: RLMObject { 
} 

Registro errori:

migrazione è richiesto per il tipo di oggetto ' Studente "a causa dei seguenti errori : - La proprietà 'resultList' è stata aggiunta al modello di oggetto più recente.

TRY non riuscita:

let configuration:RLMRealmConfiguration = RLMRealmConfiguration.defaultConfiguration() 

migration.enumerateObjects(Student.className()) { oldObject, newObject in 
    newObject!["resultList"] = RLMArray(objectClassName: Result.className()) 
} 

EDIT:

let configuration:RLMRealmConfiguration = RLMRealmConfiguration.defaultConfiguration() 
    print("Realm db current version: \(configuration.schemaVersion)") 
    configuration.schemaVersion = 1 
    configuration.migrationBlock = {(migration:RLMMigration, oldSchemaVersion: UInt64) in 
     print("Realm db migration start") 
     if oldSchemaVersion < 1 { 
      print("Schema version: 1 - Rename fields") 
      migration.enumerateObjects(Student.className()) { oldObject, newObject in 
       newObject!["creationDate"] = oldObject!["createdAt"] 
       newObject!["modifiedDate"] = oldObject!["updatedAt"] 
      } 
     } 
     print("Realm db migration finish") 
    } 
    RLMRealmConfiguration.setDefaultConfiguration(configuration) 
    let realm = RLMRealm.defaultRealm() 

SOLUZIONE:

aggiornare la versione a +1

configuration.schemaVersion += 1 
+0

Ti sembra di usare una versione piuttosto vecchia di Realm? – Shripada

+0

Da dove viene l'oggetto 'migration'? Apporta modifiche alla tua configurazione? – marius

+0

@marius ha aggiornato il mio codice completo – AJit

risposta

6

Devi incrementare il tuo schemaVersion e fornire un migrationBlock sul tuo RLMRealmConfiguration. Qui puoi migrare le tabelle. Ma non ne hai bisogno nel tuo caso specifico qui. L'aggiunta di proprietà può essere gestita automaticamente. Avrai ancora bisogno di un blocco vuoto.

let config = RLMRealmConfiguration.defaultConfiguration() 
config.schemaVersion = 1 
config.migrationBlock = { (migration, oldSchemaVersion) in 
    // nothing to do 
} 
RLMRealmConfiguration.setDefaultConfiguration(config) 
+1

Grazie a @marius, modificato sul mio codice completo .. puoi indicarmi il falso? – AJit

+0

Si noti tuttavia che non sarà sufficiente che le successive modifiche dello schema aumentino semplicemente la versione dello schema di uno. Deve essere superiore alla versione memorizzata nel database, quindi potrebbe essere opportuno archiviarvi un numero assoluto. – marius

+0

Se sei ancora in fase di sviluppo, probabilmente vorrai ripristinare il contenuto e le impostazioni del simulatore, rimuovere/rimuovere l'app e ricominciare da zero. Rende tutto molto più semplice se devi solo preoccuparti delle migrazioni tra le versioni dello schema, che sono state effettivamente distribuite. – marius