У меня есть некоторые объекты в моей базе данных Realm. Мне нужно удалить объект из него. Когда я удаляю свой объект из своего экземпляра Realm()
, объекты удаляются.Realm - база данных не обновляется после удаления
Но после выполнения запроса на удаление мне нужно получить все объекты из базы данных, но здесь сюрприз, объект по-прежнему здесь.
У меня проблема с потоком или что-то в этом роде. Я не знаю, где исследовать.
Мой упрощенный код:
Мой метод удаления:
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
Этот метод вызывается из ViewController, где я выполнить блок завершения. Этого блока завершения содержит запрос, который получит все объекты из моей базы данных Realm:
ViewController, который выполняет метод и блок завершения:
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
// ...
}
}
Я думаю, что мои 2 realm
экземпляров отличающиеся, или возникают проблемы между потоками, потому что у меня есть DispatchQueue.main.async
.
Любые идеи?
EDIT:
Я заметил, что когда я проверяю с контрольными точками, иногда это работает.
Возможно, что запрос на удаление еще не завершен и что я возвращаю объекты до конца запроса на удаление?
Он работает с autoreleasepool и realm.refresh(), спасибо, но зачем мне это делать? – AnthonyR
Ну, технически часть 'refresh()' скорее является обходным решением, если оно все еще не работает, хотя это означает, что у вас все еще есть открытые экземпляры Realm, которые вы должны обертывать блоком 'autoreleasepool', чтобы обеспечить их закрытие. – EpicPandaForce
Хорошо, спасибо, я проверю этих призраков! – AnthonyR