从错误的线程访问领域 - Swift 3

2023-12-06

在我的顶部UITableViewController如下:

let queue = DispatchQueue(label: "background")

删除任务时,将执行以下操作:

self.queue.async {
    autoreleasepool {
        let realm = try! Realm()
        realm.beginWrite()
        realm.delete(task)
        do {
            try realm.commitWrite()
        } catch let error {
            self.presentError()
        }
    } 
 }

然后我收到错误

以未捕获的类型异常终止 Realm::In CorrectThreadException:从不正确的线程访问领域。

我该如何解决这个问题?


看起来写入发生在与最初访问对象的线程不同的线程上。你应该能够通过通过修复它task的 id 并在执行写入之前(在异步块内)使用它从数据库中获取它。

所以在顶部:

var taskId = 0  // Set this accordingly

然后类似的东西

self.queue.async {
    autoreleasepool {
        let realm = try! Realm()
        let tempTask = // get task from Realm based on taskId
        realm.beginWrite()
        realm.delete(tempTask)
        do {
            try realm.commitWrite()
        } catch let error {
            self.presentError()
        }
    } 
 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从错误的线程访问领域 - Swift 3 的相关文章

随机推荐