Realm zugegriffen falsche thread - Swift 3
Oben auf meiner UITableViewController
ist folgende:
let queue = DispatchQueue(label: "background")
Wenn eine Aufgabe gelöscht wird, wird im folgenden ausgeführt wird:
self.queue.async {
autoreleasepool {
let realm = try! Realm()
realm.beginWrite()
realm.delete(task)
do {
try realm.commitWrite()
} catch let error {
self.presentError()
}
}
}
Und dann bekomme ich den Fehler
Einstellung mit uncaught exception vom Typ
realm::IncorrectThreadException: Realm zugegriffen falsche thread.
Wie könnte ich dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es scheint, das schreiben passiert in einem anderen thread als das Objekt wurde ursprünglich aus erreichbar. Sie sollten in der Lage, es zu beheben durch die übergabe
task
's id und verwenden diese, um es aus der Datenbank abgerufen rechts, bevor Sie schreiben (in der async-block).Also an der Spitze:
und dann so etwas wie
taskId
als primären Schlüssel des Reiches-Objekt, und klicken Sie dann abrufen einer Referenz auf einen hintergrund-thread, indemRealm.object(ofType:forPrimaryKey:)
.Müssen wir verstehen, dass die Tatsache Reich-Objekte kann nicht zugegriffen werden, aus verschiedenen threads. Was dies bedeutet und wie man trainiert dieses Problem.
Erste, Reich-Objekte nicht den Zugriff aus verschiedenen Threads bedeutet, eine Instanz von thread definiert in einem thread werden kann den Zugriff aus dem anderen thread. Was wir tun sollten, eigentlich müssen wir eine andere Instanz des Reiches-Instanz für jeden thread.
ZB. schauen wir uns folgenden z.B. wo setzen wir 50 Datensätze in der Datenbank, die asynchron in hintergrund-thread auf button klicken und wir fügen Benachrichtigung block im Haupt-thread zu aktualisieren, die nicht von Menschen, die in count-label. Jeder thread (Haupt-und hintergrund ) haben eine eigene Instanz des Reiches-Objekt Zugriff auf Realm Datenbank. Denn Reich-Datenbank erreicht, thread-Sicherheit, indem Sie Instanzen des Reiches thread-beschränkt.
Können Sie auch ein Threadsicher Referenz, einen bestimmten Weg zu passieren realm Objekte zwischen threads:
Die Schritte von Reich-Dokumentation:
Reich.beheben(_:).