很久以前用过Realm,但是遇到这种crash还是第一次
*** Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread.'
经过一些搜索,我找到了每次您想在另一个队列中使用时创建新实例的解决方案。
backgroundQueue.async {
print("Dispatched to background queue")
let realm = try! Realm()
....
似乎每次以及在后台队列中创建新实例的效率都不高,所以我必须调整我的代码。 有什么办法可以解决吗?
尴尬的是我确保创建实例和调用它都发生在主线程上!!!
最佳答案
你可以为线程使用 Realm 字典,像这样:
class RealmWrapper {
var realm: Realm? {
return realmsPool.realmForThread(Thread.current)
}
var realmsPool = RealmsPool()
}
class RealmsPool {
var realms = [Thread: Realm]()
func realmForThread(_ t: Thread) -> Realm? {
if let realm = realms[t] {
return realm
}
do {
let newRealm = try Realm(configuration: config)
self.realms[t] = newRealm
return newRealm
} catch {
fatalError("\(error)")
}
}
}
关于ios - 从不正确的线程访问的 Realm 。 iOS 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54994686/