2016-07-22 6 views
2

Im mit Realm für meine iOS App und für eine Tabelle ich habe einen Primärschlüssel „name“Update-Realm Primärschlüsselwert swift

   let application = Application() 
       application.domain = app.domain 
       application.name = app.name 
       realm.add(application) 

jetzt, wenn es versuchen, den Namen zu aktualisieren es einen Fehler wirft

app?.name = newName 

der Fehler

Primary key can't be changed after an object is inserted. 

Wie kann ich dieses Problem lösen?

das ist, wie ich die Primärschlüssel

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

Können Sie uns bitte die Erklärung Ihres Primärschlüssels zeigen? –

+0

@VishalSonawane Ich habe die Frage aktualisiert, wie ich den Primärschlüssel deklariere – spaceMonkey

+1

Ihr Primärschlüssel ist der Name. Sie können den Primärschlüssel nicht ändern. Sie können das Objekt löschen und ein neues erstellen – Idan

Antwort

3

Wenn Sie ein Objekt mit einem primary key einfügen erklären Sie es nicht ändern können:

Von Realm Docs

Primärschlüssel ist ein hinzugefügt Realm, der Primärschlüssel kann nicht geändert werden.

Welche lassen Sie mit wenigen Optionen:

  • entfernen und wieder einsetzen, das Objekt
  • Ändern der Primärschlüssel zu etwas, das nicht ändert, wie id
  • Auslassen der Primary Key. Wenn Sie keins definieren, haben Sie keinen Primärschlüssel, was bedeutet, dass Sie mehr als ein Objekt mit demselben Wert für diese Eigenschaft haben können und es nicht von dieser Eigenschaft indiziert wird.
+1

Dies funktioniert, weil der Absturz passiert, sobald ich 'app.name = newName 'bevor sogar ein' realm.add' – spaceMonkey

+0

Ich endete entfernen und neues Objekt hinzufügen. aber das hat mich in das Problem gebracht, wo das Objekt Beziehungen hat. Machen Sie alle diese Beziehungen null – spaceMonkey

+0

Halten Sie einfach die Beziehungen lokal für die Übertragung. – Idan