警告 Swift 后重新加载表
Posted
技术标签:
【中文标题】警告 Swift 后重新加载表【英文标题】:Reload table after alert Swift 【发布时间】:2015-11-06 19:15:26 【问题描述】:从 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
时,表格仍然没有重新加载
【问题讨论】:
至少在主线程上调用reloadData()
。
我没有使用 Parse 的经验,但根据parse.com/questions/…,所有完成块都在主线程上执行。另一方面,这里***.com/questions/29879884/… 声称需要调度到主线程。
【参考方案1】:
如果-deleteInBackgroundWithBlock:
没有在主线程上调用您的块,您可能会看到这种行为。假设您也想在后台执行您的块是合理的。我在 Parse 文档中找到它,但它没有说明它是否在主线程上返回。
如果确实是这个问题,你可以这样解决:
game.deleteInBackgroundWithBlock( (success, error) -> Void in
if error == nil
dispatch_async(dispatch_get_main_queue(), ^
self.tableView.reloadData()
)
)
【讨论】:
【参考方案2】:如果你正在使用 PFQueryTableViewController 你可以尝试调用
loadObjects()
而不是self.tableView.reloadData()
【讨论】:
【参考方案3】:我在 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
【讨论】:
以上是关于警告 Swift 后重新加载表的主要内容,如果未能解决你的问题,请参考以下文章
Swift 2.0 错误:警告:无法加载任何 Objective-C 类信息
Swift 3 获取请求错误(警告:无法加载任何 Objective-C 类信息)