我很久以前曾经与Realm合作,但这是第一次遇到这种崩溃
*** Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread.'
经过一番搜索,我找到了有关每次您想在另一个Queue中使用新实例时都创建新实例的解决方案。
backgroundQueue.async {
print("Dispatched to background queue")
let realm = try! Realm()
....
似乎每次创建新实例以及在后台队列中创建新实例的效率都不高,因此我必须对此进行调整。 有什么办法解决这个问题?
尴尬的是,我确保创建实例并调用它都发生在主线程上!
答案 0 :(得分:1)
您可以将领域字典用于线程,如下所示:
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)")
}
}
}