Es ist richtig, dass Realm-Objekte nicht threadsicher sind und nicht über Threads übergeben werden können, aber es ist trotzdem recht einfach, mit Realm in einer Multithread-Umgebung zu arbeiten, sobald Sie den Dreh raus haben. :)
Wenn Sie einige Änderungen an einer Realm
Instanz in einem Hintergrundthread vornehmen, wird die äquivalente Realm
Instanz im Hauptthread automatisch mit diesen Änderungen bei der nächsten Iteration der Ausführungsschleife aktualisiert. Wenn Sie Results
Listen im Hauptthread haben (dh zum Anzeigen von Realm-Objekten in einer UITableView
), werden diese Objekte auch automatisch mit den neuen Objekten/Änderungen aktualisiert, und Sie müssen lediglich sicherstellen, dass Ihre Benutzeroberfläche aktualisiert wird um diese Änderungen zu berücksichtigen. (NB: Für Realm
Instanzen in anderen Threads, aber nicht der Haupt-Thread, müssen Sie Realm.refresh()
nennen explizit in diesen Änderungen zu ziehen.)
Wenn Sie mit einem expliziten Realm Modell Object
und wollen arbeiten, es passieren zu einem anderen Thread, um dort weiter zu arbeiten, ist die einfachste Sache zu tun, es zu einer Realm
Instanz auf dem aktuellen Thread zu speichern, und dann wieder von der gleichwertigen Realm
Instanz auf dem neuen Thread abzurufen. In diesem Fall wird empfohlen, dass Ihr Object
-Schema eine primary key property enthält, da Sie diesen Wert über Threads übergeben können, und rufen Sie dann das gleiche Objekt erneut ab, indem Sie Realm.objectForPrimaryKey()
für den neuen Thread aufrufen.
Für weitere Informationen empfehle ich die Threading section auf Realms Dokumentationsseite. Wir arbeiten derzeit auch an einer Möglichkeit, die Benachrichtigung bei der Änderung von Realm-Objekten im Hintergrund zu vereinfachen, damit UI-Updates automatisch ausgelöst werden.
(Disclaimer: Ich für Realm arbeiten)
Um gerade diese Antwort zu aktualisieren, wie von Realm 2.2 (iOS, macOS, etc) Sie jetzt 'ThreadSafeReference' verwenden können, anstatt über den Primärschlüssel übergeben: https : //realm.io/news/obj-c-swift-2-2-thread-safe-reference-sort-properties-relationships/ Ich würde immer noch fragen, ob es Wert gibt Realm-Objekte auf Swift Objects zu mappen, wenn sie sicher gehandhabt werden Ist es eine totale Zeitverschwendung und sollte nie in Betracht gezogen werden? –