gpt4 book ai didi

swift 错误 : Realm accessed from incorrect thread

转载 作者:行者123 更新时间:2023-11-28 13:26:18 25 4
gpt4 key购买 nike

我正在尝试使用 Realm 库在我的应用程序中保存数据。但是,我一直遇到相同的错误代码:“从不正确的线程访问的 Realm ”。我试图通过创建一个特定于 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 的线程要求的误解。我将不胜感激对此事的任何见解,或从这里进入的方向。

最佳答案

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

要修复该错误,fetch 中的代码还需要在您创建的 Realm 线程上运行。

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

关于 swift 错误 : Realm accessed from incorrect thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58308337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com