警报Swift后重新加载表

时间:2015-11-06 19:15:26

标签: ios swift uitableview parse-platform

我正在尝试从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

时,表格仍未重新加载

3 个答案:

答案 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
  }