【发布时间】:2017-03-22 14:05:24
【问题描述】:
这不是重复的问题,请继续阅读!
当我在 DispatchQueue 中使用 RealmBackend 单例时,我收到“'RLMException',原因:'从错误线程访问的领域'”错误消息。
这是我的课:
class RealmBackend {
static let shared = RealmBackend()
var realm = try? Realm()
}
其中有像addObject() 这样的函数正在访问realm.commitWrite() 和realm.beginWrite() 函数。
现在我用 DispatchQueue.main.sync 从回调 (UIRefreshControl) 调用 addObject 函数,因为我假设 Realm 对象是在 main 线程上创建的(我在 Github 上的某个地方读到你需要用于实例化和访问Realm() 值的相同线程)。
正如我之前所说,我总是收到这个RLMException,有人遇到过同样的问题吗?
【问题讨论】:
-
那是因为你需要创建调度队列的后台线程的Realm实例才能在调度队列的后台线程上使用它....也建议把它放在显式的自动释放池中。
-
@EpicPandaForce 您能否在答案中发布一个小代码示例?我也尝试过(在我的单例的 privat init 中),但它给了我奇怪的错误。
-
如果还期望在主线程上使用该实例,那么仅在后台线程上创建 Realm 实例是不够的。您需要确保使用单独的 Realm 实例;每个线程一个。我在下面的答案中概述了它的工作原理。 :)
标签: swift multithreading realm