警告 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 类信息)

用jquery实现当页面加载时定时弹出警告框,怎么实现啊?

Xcode8/Swift 3 更新后缺少 Firebase 标头警告

警告未加载vboxdrv内核模块

CoreData:警告:无法加载名为的类