gpt4 book ai didi

ios - Swift - 由于某种原因,Realm 在主线程上

转载 作者:行者123 更新时间:2023-11-29 11:25:31 25 4
gpt4 key购买 nike

所以我正在重构一些代码,并且我有 Realm 的线程安全问题。

我有两层,第一层是本地存储:

class LocalStorage {

static private var db: RealmDB = RealmDB.sharedInstance

static func updateTest(_ object: [Object], async: Bool = true, success: @escaping () -> Void, failure: @escaping () -> Void) {
if async {
db.insertAsynctTest(object, success: {
success()
}) {
failure()
}
} else {
db.insertTest(object, success: {
success()
}) {
failure()
}
}
}
}

第二个是单音域:

class RealmDB {

// create OR update

static let sharedInstance = RealmDB()

var realm: Realm?

init() {
do {
self.realm = try Realm()

} catch {
handleError(error)
}
}

func insertAsynctTest(_ objects: [Object], success: @escaping () -> Void, failure: @escaping () -> Void) {
DispatchQueue(label: "com.example.myApp.bg").async {
autoreleasepool {
if let realmDB = self.realm {
do {
try realmDB.write {
for object in objects {
realmDB.add(object, update: .modified)
}
success()
}
} catch let error as NSError {
print("Something went wrong: \(error.localizedDescription)")
failure()
}
}
failure()
}
}
}

然而,每次我使用本地存储 - Realm 时,我都对“从不正确的线程访问的 Realm ”感到不满

我曾尝试在同一个线程(“com.example.myApp.bg”)上初始化单例,但我仍然很迷恋。想了解那里的线程中发生了什么。

谢谢!

最佳答案

你不应该在不同的线程中使用 Realm 实例。每个线程都需要自己的实例。

Sharing Realm instances across threads is not supported. Realm instances accessing the same Realm file must also all use the same Realm.Configuration.

https://realm.io/docs/swift/latest/#threading

试试这个:

   DispatchQueue(label: "com.example.myApp.bg").async {
autoreleasepool {
if let realmDB = try? Realm() {
do {
try realmDB.write {
for object in objects {
realmDB.add(object, update: .modified)
}
success()
}
} catch let error as NSError {
print("Something went wrong: \(error.localizedDescription)")
failure()
}
}
failure()
}
}

关于ios - Swift - 由于某种原因,Realm 在主线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59067363/

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