私はこのようになります私のレルムオブジェクトの進展プロパティを更新しようとしている:更新アップロードの進捗
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"
}
}
私がアップロードの進行状況の更新ごとに0.5を与える使用していますフレームワーク約秒。コールバックは、次のようになります。上記のコードでは
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)
}
}
、それがクラッシュし、私に「RLMException」を与え、その理由続ける:「レルムは、ライト・トランザクションですでに」です。
私は私が実行している3件の同時ダウンロードを持っている、または問題のオブジェクトがビジー状態であるので、(私は同じ主キーとそれを割り当てる新しいオブジェクトを作成すると、これを軽減することを考えた?)
ため、このエラーが発生したかどうかを知っている」いけません私の質問は、これについてどうすればいいですか?私は、あなたがレルムを使用するものの外に少しあることをしようとしていますか?
'update()'が呼ばれるたびに新しい 'Upload'オブジェクト全体を作成する根拠は何ですか?既存の 'Upload'オブジェクトを渡しているので、' progress'の新しい値を既存の 'upload'に書き込むほうが理にかなっていると思います。 – AustinZ