2015-07-02 16 views
8

Desidero migrare lo schema del mio reamm in una nuova versione. Pertanto è necessaria la rimozione della mia chiave primaria.Migrazione della chiave primaria di realm

vecchio schema:

class StudyState : Object 
{ 
    dynamic var name = "" 
    dynamic var x = "" 
    dynamic var y = "" 

    override static func primaryKey() -> String? { 
    return "name" 
    } 
} 

Nuovo schema:

class StudyState : Object 
{ 
    dynamic var name = "" 
    dynamic var x = "" 
    dynamic var y = "" 
} 

Senza migrazione, regno fallirà con

'RLMException', la ragione: 'La migrazione è necessario per tipo di oggetto 'StudyState' a causa dei seguenti errori: - Prop 'nome' erty non è più una chiave primaria. '

Ho provato questo blocco migrazione, che non è riuscito troppo:

migration.enumerate(StudyState.className()) { oldObject, newObject in 
    newObject?["deleted"] = false 
    newObject?["primaryKeyProperty"] = "" 
} 

'RLMException', la ragione: 'nome di proprietà non valido'

C'è un modo per rimuovere la chiave primaria quando si trasferisce l'ambito in una nuova versione dello schema?

risposta

6

Non è necessario eseguire alcuna operazione nel blocco migrazione se si rimuove solo l'annotazione della chiave primaria. Tuttavia, è necessario aumentare la versione dello schema perché le definizioni dello schema sono cambiate.

come di seguito:

// You have to migrate Realm BEFORE open Realm if you changed schema definitions 
setSchemaVersion(1, Realm.defaultPath) { (migration, oldSchemaVersion) -> Void in 
    if oldSchemaVersion < 1 { 
     // Nothing to do! 
     // Realm will automatically detect new properties and removed properties 
     // And will update the schema on disk automatically 
    } 
} 

let realm = Realm() 
... 
+0

ma dov'è "setSchemaVersion" da? – User9527

+0

@ User9527 Questa risposta è per la versione troppo vecchia. Nell'ultima versione, è possibile utilizzare 'Realm.Configuration' per specificare la versione dello schema. Vedi anche https://realm.io/docs/swift/latest/#migrations –

Problemi correlati