这是我的问题:我正在做后台工作,在那里我解析一些JSON并将一些对象写入我的Realm,在主线程中我尝试更新UI(重新加载TableView,它链接到一个数组宾语)。但是当我重新加载UI时,我的tableView没有更新,就像我的Realm没有更新一样。我有重新加载我的视图以查看更新。这是我的代码:
if (Realm().objects(Objects).filter("...").count > 0)
{
var results = Realm().objects(Objects) // I get the existing objects but it's empty
tableView.reloadData()
}
request(.GET, url).responseJSON() {
(request, response, data, error) in
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// Parsing my JSON
Realm().write {
Realm().add(object)
}
dispatch_sync(dispatch_get_main_queue()) {
// Updating the UI
if (Realm().objects(Objects).filter("...").count > 0)
{
results = Realm().objects(Objects) // I get the existing objects but it's empty
tableView.reloadData()
}
}
}
}
我必须用我的线程做坏事,但我找不到什么。有人知道什么是错的吗?
感谢您的回答!
答案 0 :(得分:3)
这样的工作流程对我来说更有意义:
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// Parsing my JSON
Realm().write {
Realm().add(object)
dispatch_sync(dispatch_get_main_queue()) {
// Updating the UI
if (Realm().objects(Objects).filter("...").count > 0)
{
results = Realm().objects(Objects) // I get the existing objects but it's empty
tableView.reloadData()
}
}
}
}
注意:您的原始工作流程中的计时有问题:在执行写入块之前,可能会更新 ,这就是您的UI看起来被放弃的原因;根据他们的表现计划,上面的这个想法将是任务之间更加同步的方式。
答案 1 :(得分:0)
您正在获取一些新对象并将其存储到"结果"中。
tableView.reloadData()应该如何访问该变量?您必须更改tableView委托将访问的某些。
PS。每个dispatch_sync()都是潜在的死锁。你正在使用一个毫无意义的。避免使用dispatch_sync,除非您有非常非常好的理由使用它。