App*_*eIt 4 multithreading realm grand-central-dispatch ios swift
我的首要任务UITableViewController是:
let queue = DispatchQueue(label: "background")
Run Code Online (Sandbox Code Playgroud)
删除任务后,将执行以下操作:
self.queue.async {
autoreleasepool {
let realm = try! Realm()
realm.beginWrite()
realm.delete(task)
do {
try realm.commitWrite()
} catch let error {
self.presentError()
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我收到错误
以realm :: IncorrectThreadException类型的未捕获异常终止:从错误线程访问的领域。
我该如何解决?
看起来写操作发生在与最初访问该对象不同的线程上。您应该能够通过传递taskID并使用该ID 来修复它,然后再执行写操作(在异步块内部),然后从数据库中获取它。
所以在顶部:
var taskId = 0 // Set this accordingly
Run Code Online (Sandbox Code Playgroud)
然后像
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()
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8074 次 |
| 最近记录: |