gpt4 book ai didi

ios - Realm 不正确的线程访问崩溃

转载 作者:行者123 更新时间:2023-12-01 17:47:59 27 4
gpt4 key购买 nike

我参加这个聚会迟到了,而Realm还是新手

我创建了一个signleton类,该类具有以下编写方法,但是由于不正确的线程访问,它有时会崩溃

让我知道我在这里做错了。

 func save<T:Object>(_ realmObject:T) {
let backgroundQueue = DispatchQueue(label: ".realm", qos: .background)
backgroundQueue.async {
let realm = try! Realm()
try! realm.write {
realm.add(realmObject)

}
}

}

最佳答案

感谢您提出这个问题!错误的线程访问异常是由于Realm对象通过线程边界传递的结果。我建议阅读有关Passing Instances Across Threadsthis blog post的文档(特别是有关线程限制的部分)。

为了避免该异常,您需要将代码更改为:

func save<T:Object>(_ realmObject:T) {
let realmObjectRef = ThreadSafeReference(to: realmObject)
let backgroundQueue = DispatchQueue(label: ".realm", qos: .background)
backgroundQueue.async {
guard let realmObject = realm.resolve(realmObjectRef) else {
return // although proper error handling should happen
}

let realm = try! Realm()
try! realm.write {
realm.add(realmObject)
}
}
}
ThreadSafeReference对象 documented here为您提供了给定Realm对象的线程安全引用,该引用可以通过线程边界传递,一旦您安全地位于其他线程中,便可以解析回线程受限对象。希望对您有所帮助,让我知道您是否还有其他需要。干杯!

关于ios - Realm 不正确的线程访问崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42002733/

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