如何删除所有对象并停止对领域数据库的所有写操作?

时间:2019-05-21 00:02:11

标签: swift realm

注销时,我正在致电

let realm = try! Realm()
try! realm.write {
    realm.deleteAll()
}

在主线程上,这没有问题。但是,我正在进行一些网络操作,并且在后台线程上进行的写入称为注销后。我现在得到

RLMException
Adding a deleted or invalidated object to a Realm is not permitted

因为它正在尝试更新已删除的对象。解决此问题的正确方法是什么?我是否需要在每次写入之前使用object.isValid()检查每个对象以解决注销问题,还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

这当然可能不适合您的情况,但是我建议避免此类问题的最佳方法是更改​​应用程序的流程,以便:-

  1. 当用户请求注销时,应停止任何后台网络线程,或者您应该等待它们完成。
  2. 一切完成后,关闭并整理Realm数据库。

如果要完全删除数据库,那么取消所有任务可能与等待完成一样有效。

如果您无法取消它们,那么也许检查用户是否仍在网络任务完成时登录会有所帮助。

无论哪种方式,我建议您确保遵循“完成任务然后注销”的顺序。