2015-07-02 6 views
8

Ich möchte mein Realm-Schema auf eine neue Version migrieren. Daher ist das Entfernen meines Primärschlüssels erforderlich.Realm primäre Schlüsselmigration

alte Schema:

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

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

Neues Schema:

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

Ohne Migration wird Reich nicht mit

'RLMException' Grund: ‚Migration ist erforderlich für Objekttyp 'StudyState' aufgrund folgender Fehler: - Prop Der Name "Name" ist kein Primärschlüssel mehr. "

Ich habe versucht, diese Migration Block, die auch nicht weiter:

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

'RLMException', Grund: 'Ungültige Eigenschaftsname'

Gibt es eine Möglichkeit zu entfernen der Primärschlüssel beim Migrieren des Realms zu einer neuen Schemaversion?

Antwort

6

Sie müssen im Migrationsblock nichts tun, wenn Sie nur die Primärschlüsselanmerkung entfernen. Es ist jedoch erforderlich, die Schemaversion zu erhöhen, da Schemadefinitionen geändert wurden.

wie unten:

// 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

aber wo ist "setSchemaVersion" aus? – User9527

+0

@ User9527 Diese Antwort ist für eine zu alte Version. In der neuesten Version können Sie 'Realm.Configuration' verwenden, um stattdessen die Schemaversion anzugeben. Siehe auch https://realm.io/docs/swift/latest/#migrations –

Verwandte Themen