我正在尝试从Parse中删除对象后重新加载我的tableView。
我在完成处理程序中尝试self.tableView.reloadData()
,甚至得到print
语句,告诉我它何时完成,但我的表格没有重新加载。
@IBAction func trashButtonPressed(sender: UIButton) {
print("Button pressed")
let alertController = UIAlertController(title: "Alert", message: "Do you want to delete all recent games?", preferredStyle: .Alert)
let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel) { (action) in
}
let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in
for game in self.games[3] {
game.deleteInBackgroundWithBlock({ (success, error) -> Void in
if error == nil {
self.tableView.reloadData()
print("Did delete game? \(success)")
}
})
}
}
alertController.addAction(cancelAction)
alertController.addAction(OKAction)
presentViewController(alertController, animated: true, completion: { () -> Void in
print("Alert was shown")
})
}
我做错了什么?我应该在哪里放self.tableView.reloadData()
?
修改
我试图像这样得到主队列:
game.deleteInBackgroundWithBlock({ (success, error) -> Void in
if error == nil {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
print("Did delete game? \(success)")
} else {
print("Error: \(error)")
}
})
按下OK
答案 0 :(得分:2)
如果-deleteInBackgroundWithBlock:
没有在主线程上调用您的块,则可能会看到此行为。假设您想要在后台执行您的块,这是合理的。我在Parse文档中找到了它,但它没有说明它是否在主线程上返回。
如果这确实是问题,你可以这样解决:
game.deleteInBackgroundWithBlock({ (success, error) -> Void in
if error == nil {
dispatch_async(dispatch_get_main_queue(), ^{
self.tableView.reloadData()
})
}
})
答案 1 :(得分:1)
如果您正在使用PFQueryTableViewController,则可以尝试调用
loadObjects()
而不是self.tableView.reloadData()
答案 2 :(得分:0)
我在deleteInBackgroundWithBlock之后使用了defer {...},所以它实际上适用于我的情况。
object.deleteInBackgroundWithBlock(nil)
defer {
array = [] // remove all object in the array that you query before
queryParse() // query new object from Parse (without deleted object)
tableView.reloadData() // reload tableView
}