レルムデータベースにオブジェクトがあります。私はそれからオブジェクトを削除する必要があります。 Realm()
インスタンスからオブジェクトを削除すると、オブジェクトは完全に削除されます。レルム - データベースは、削除後に最新ではありません
削除要求を実行した後、データベースからすべてのオブジェクトを取得する必要がありますが、ここで驚いたことに、オブジェクトはまだここにありますです。
スレッドの問題があると思います。 調査する場所がわかりません。
マイ簡略コード:
マイ削除方法:この方法は、私は完了ブロックを実行するのViewControllerから呼び出され
func myDeleteFunc(completion :()->Void){
let realm = try! Realm()
// ...
try! realm.write {
realm.delete(myObject)
}
completion()
}
// Here the object have been deleted from the realm instance, no problem
。 、私は私の2つのrealm
インスタンスが異なると思い
myDeleteFunc(completion: {
DispatchQueue.main.async {
let realm = try! Realm()
let objects = Array(realm.objects(MyObject.self).sorted(byProperty: "aProperty"))
// Here objects still contains the object that I have already deleted
// ...
}
}
:
のViewController方法および完了ブロックを実行: この終了ブロックは私のレルムのデータベースからすべてのオブジェクトを取得要求が含まれています私はDispatchQueue.main.async
を持っているのでスレッド間に問題があります。
アイデア?
EDIT:
私はブレークポイントをチェックしたときに、時にはそれが働くことに気づきました。
削除要求がまだコミットされておらず、削除要求の終了前にオブジェクトを取得している可能性がありますか?
これはautoreleasepoolとrealm.refresh()で動作しますが、どうして私はこれを行う必要がありますか? – AnthonyR
'refresh()'部分はまだ機能しない場合、回避策のほうがはるかに優れていますが、あなたが閉じるために 'autoreleasepool'ブロックでラップしておく必要があるRealmインスタンスがまだ開いていることを意味します。 – EpicPandaForce
さて、ありがとう、私はそれらの幽霊をチェックします! – AnthonyR