领域从错误的线程访问。 iOS最佳实践

问题描述 投票:0回答:1

我很久以前就和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()
     ....

似乎每次创建新实例以及后台队列都没有效率,所以我必须调整我的代码。有什么方法可以解决这个问题吗?

尴尬的是,我确保创建实例并调用它都发生在主线程上!

ios swift iphone realm realm-mobile-platform
1个回答
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)")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.