Swift - 领域,成功添加项目后完成

Swift - Realm , completion after successfully adding item

所以我有这段代码,用于将项目添加到领域中:

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

关闭是必须的,因为我需要知道操作已经完成。 现在发生的事情是我不知道领域是否完成了在他的线程中添加,所以 success() 是错误的,因为循环完成但添加没有,当我在粉碎后尝试获取数据时出现以下错误:"Realm accessed from incorrect thread"。 有没有办法知道添加完成? 谢谢

Realm 不是线程安全的。 "Realm accessed from incorrect thread" 意味着您首先在不同的线程上初始化了领域,现在您正试图在不同的线程上访问领域。您应该始终在首先初始化的线程上访问领域。

如果先在主线程中初始化领域,则只能在主线程中访问领域。

还有另一种跨线程访问领域的方法。它是通过使用 ThreadSafeReference

//If you have a person initialized from a different thread, create a ThreadSafeReference for that object
let personRef = ThreadSafeReference(to: person)

现在您可以在任何线程中使用该对象

DispatchQueue(label: "com.example.myApp.bg").async {
  let realm = try! Realm()
  guard let person = realm.resolve(personRef) else {
    return // person was deleted
  }
  try! realm.write {
    person.name = "Jane Doe"
  }
}

请参考领域documentation线程安全。