Ich versuche, einen Fortschritt Eigenschaft auf meinem Realm Objekt zu aktualisieren, die wie folgt aussieht:Aktualisierung Upload-Fortschritt auf Realm Objekt
class Upload: Object {
dynamic var name: String = ""
dynamic var key: String = ""
dynamic var localIdentifier:String = ""
dynamic var data: NSData? = nil
dynamic var albumKey: String = ""
dynamic var isUploading: Bool = false
dynamic var status: String = ""
dynamic var progress: Float = 0.0
dynamic var urlString: String = ""
let isVideo = RealmOptional<Bool>()
override static func primaryKey() -> String? {
return "localIdentifier"
}
}
Der Rahmen i für den Upload einen Fortschritt Update geben bin mit jedem 0,5 Sekunden ca. Der Rückruf sieht wie folgt aus:
task.observe(.progress) { snapshot in
let float = Float(snapshot.progress!.fractionCompleted)
self.update(progress: float, forUpload: upload)
}
fileprivate func update(progress: Float, forUpload upload: Upload) {
do {
let realm = try Realm()
let u = Upload()
u.progress = progress
u.localIdentifier = upload.localIdentifier
try realm.write {
realm.add(u, update: true)
}
} catch {
print(error)
}
}
Mit dem obigen Code, es stürzt immer wieder ab und gibt mir ein ‚RLMException‘ Grund: ‚Das Reich ist bereits in einer Schreibtransaktion‘.
I dont‘wissen, ob dieser Fehler tritt auf, weil ich habe 3 simultane Downloads ausgeführt wird, oder weil das Objekt in Frage beschäftigt ist (ich dachte, dass ein neues Objekt erstellt es mit dem gleichen Primärschlüssel zuweisen würde dies lindern?)
Also meine Frage ist, wie gehe ich darüber? Versuche ich etwas zu tun, das etwas außerhalb von dem liegt, für das du Realm verwenden würdest?
Was ist der Grund dafür, jedes Mal, wenn 'update()' aufgerufen wird, ein ganz neues "Upload" -Objekt zu erstellen? Da Sie ein vorhandenes "Upload" -Objekt übergeben, würde ich denken, dass es sinnvoller ist, einfach den neuen Wert von 'progress' in den vorhandenen' upload' zu schreiben. – AustinZ