Ich verwende RealmSwift
für mein Projekt. Aber ich bin nicht sicher, wie die folgenden zu bewältigen:RealmSwift RLMException
RMLException
: Der Versuch, Objekt außerhalb einer Schreibtransaktion zu ändern - rufenbeginWriteTransaction
auf einerRLMRealm
Instanz erste
geworfen.
Jeder irgendeinen Anhaltspunkt?
import RealmSwift
func createOrUpdateMachineInRealm(machine: Machine){
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let realm = Realm()
realm.beginWrite()
realm.write{
realm.add(machine, update: true)
}
realm.commitWrite()
dispatch_async(dispatch_get_main_queue()) {
// update some UI
actionDelegate?.operationCompleted(true)
}
}
}
Lösung: Ich gehe für Maschine in den Parametern als auch und ordnen sie in der realm.write an der Maschine()
func createOrUpdateMachineInRealm(machine: Machine, name: String){
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let realm = Realm()
realm.write{
machine.name = name
realm.add(machine, update: true)
}
}
}
Danke für die Antwort @NateMann. Ich kann es das erste Mal ohne Fehler hinzufügen. Allerdings habe ich diese '*** Terminating App aufgrund der nicht abgefangenen Ausnahme 'RLMException', Grund: 'Versuch, das Objekt außerhalb einer Schreibtransaktion zu ändern - rufe zuerst beginWriteTransaction auf einer RLMRealm-Instanz auf.' 'Wenn ich die Methode erneut aufrufen (z aktualisieren). – perwyl
Fügen Sie eine Maschine hinzu oder aktualisieren Sie eine. Wenn du eines aktualisierst, mach machine.name = "Drill", muss dies in Realm() gemacht werden. Schreibe {}, wie dieses Realm(). Write {machine.name = "Drill"} –
Ist das möglich? ich das Machine-Objekt auf UI-Ebene aktualisieren und an Realm() (Storage.swift) für die Schreibtransaktion übergeben? Ich versuche, Realm bei den ViewControllern zu vermeiden. Sehr neu bei realmSwift – perwyl