快速错误:从错误的线程访问领域

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

我正在尝试使用Realm库将数据持久保存在我的应用程序中。但是,我一直遇到相同的错误代码:“从错误的线程访问领域”。我尝试通过创建特定于领域的调度队列并将所有我的Realm调用包装在其中来解决此问题。

这是我的“ RealmManager”类现在的样子:

import Foundation
import RealmSwift

class RealmManager {

fileprivate static let Instance : RealmManager = RealmManager()

fileprivate var _realmDB : Realm!
fileprivate var _realmQueue : DispatchQueue!

class func RealmQueue() -> DispatchQueue {
    return Instance._realmQueue
}

class func Setup() {
    Instance._realmQueue = DispatchQueue(label: "realm")
    Instance._realmQueue.async {
        do {
            Instance._realmDB = try Realm()
        } catch {
            print("Error connecting to Realm DB")
        }
    } 
}

class func saveObjectArray(_ objects: [Object]) {

    Instance._realmQueue.async {
        do {
            try Instance._realmDB.write {
                for obj in objects {
                    Instance._realmDB.add(obj, update: .all)
                }
            }
        } catch {
            print("Error Saving Objects")
        }
    }
}

class func fetch(_ type: Int) -> [Object] {

    if let realm = Instance._realmDB {
        let results = realm.objects(Squeak.self).filter("type = \(type)")
        var returnArray : [Object] = []
        for r in results {
            returnArray.append(r)
        }

        return returnArray
    }
    return []
}

我正在didFinishLaunchingWithOptions内部调用Setup()来实例化Realm队列和Realm Db实例。

我在saveObjectArray中获得错误代码:

try Instance._realmDB.write { }

这似乎只是我对Realm线程要求的误解。如果您对此事有任何见解,或者从这里进入方向,我将不胜感激。

swift realm grand-central-dispatch
1个回答
0
投票

此问题是,您在与保存数据不同的线程上获取Realm数据。

要解决该错误,fetch中的代码也将需要在您创建的Realm线程上运行。

[我认为this的文章很好地解释了Realm中的多线程,特别建议注意本文中概述的三个规则。

© www.soinside.com 2019 - 2024. All rights reserved.