我很久以前就和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()
....
似乎每次创建新实例以及后台队列都没有效率,所以我必须调整我的代码。有什么方法可以解决这个问题吗?
尴尬的是,我确保创建实例并调用它都发生在主线程上!
你可以使用领域的字典字典,如下所示:
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)")
}
}
}