2016-05-13 11 views
0

Ist es möglich, die Beziehungen eines Realm-Objekts zu aktualisieren, indem nur die IDs der Beziehungen übergeben werden?Realm-Beziehung mit primären IDs aktualisieren

Wenn ich eine Library Klasse, die eine List<Books> Beziehung hat und ich wollte zwei Libraries zusammen fusionieren, würde ich das wie getan werden, vermuten könnte:

let bookIds = (firstLibrary.books.toArray() + secondLibrary.books.toArray).map { $0.id } 

Dann benutze ich ObjectMapper & SugarRecord:

let changes = ["books": bookIds] 
Mapper<T>().map(changes, toObject: secondLibrary) 
let realm = self.realm 
realm.add(secondLibrary, update: true) 

Aber die Liste der Bücher wird nicht aktualisiert. Ich nehme an, das liegt daran, dass ObjectMapper nichts über primäre IDs weiß und daher versucht, sie in ein Objekt abzubilden, tut nichts.

Kann Realm über die primäre ID aktualisieren? Wenn ja, würde ich gerne meinen Persistenz-Stack umschreiben.

+0

Der Code, den Sie gepostet haben, ist etwas unklar. Ihr zweites Snippet scheint sich überhaupt nicht auf die Objekt-IDs zu beziehen und verweist auf eine Anzahl verschiedener Variablen, deren Typen aus dem Kontext nicht offensichtlich sind. Können Sie näher erläutern, wie Ihre Modelle aussehen und was Sie damit machen? – bdash

Antwort

1

Für die Zukunft: eine Abhilfe, die auf this Github issue diskutiert wurde, ist die Objekterstellung Code in dem Beispiel als solche zu ändern:

let books = ["1", "2"].map { realm.objectForPrimaryKey(Book.self, key: $0) } 
realm.create(Library.self, values: ["id": "4321", "books": books], update: true) 

Es ist nicht möglich, direkt eine Liste der Primärschlüsselwerte passieren, wie Teil des Werts, der an die API create() übergeben wurde, um eine Library zu erstellen, und Realm hat automatisch die Book Objekte erstellt oder aktualisiert, die diesen Primärschlüsseln zugeordnet sind.

Stattdessen Diese Umgehungs erste abruft oder erstellt die Book Objekte für jeden Primärschlüsselwert unter Verwendung objectForPrimaryKey(), und erstellt dann die Library jene Book Objekte mit create() verwenden.

+0

Das war die github Frage, die ich öffnete .... – barndog

+1

Yeah. Ich wollte nur die Antwort hier dokumentieren, falls jemand anders auf SO die gleiche Frage hat und diese findet. – AustinZ