肇鑫的技术博客

业精于勤,荒于嬉

Realm的坑(一)

Realm中常见的“Realm accessed from incorrect thread”问题的分析总结

Realm的Results中,有一个很有用的特性,叫做自动更新。顾名思义,就是这个结果会在使用时自动重新查询,已保证最新。当然,这也带来了新的问题。

一旦在创建该变量的线程之外使用该变量,就会导致程序崩溃。

比如,今天我就是在请求通知权限的代码中使用了tasks变量。结果导致程序崩溃。因为这个请求是调用了系统的请求,不是程序本身的线程。

解决办法

  1. 新建realm,重新查询
  2. 使用临时变量,而不使用Results的变量。
  3. 使用DispatchQueue.main.async,更改执行的thread。

备注

print(Thread.current) //可以调试当前的thread

相关

Realm的坑(一)
Realm的坑(二)
Realm的坑(三)
Realm的坑(四)