UITableView 最初不加载数据

UITableView Not Loading Data Initially

我的 UITableViewController,最初查看时不包含任何数据。然而,有一次,我转到另一个 UIViewController,当 segue 仍在动画时数据出现,然后数据就在那里。所以要真正看到数据,我需要转到另一个 ViewController,然后再回到 UITableViewController。我正在使用 Parse.com 框架。下面的代码,是初始的ViewController,它也是一个UITableViewController,它对初始不包含任何数据的UITableViewController进行segues。感谢帮助,我是IOS开发的新手,所以请在swift.
EDIT:Many的答案或评论中进行回答假设数据被检索,只是没有加载到 UITableViewController。然而,问题是在 segue 完成时数据还没有被检索到。谢谢

override func prepareForSegue(segue: UIStoryboardSegue, sender:AnyObject?){
    var cell = sender as UITableViewCell
    var text = cell.textLabel!.text
    currentScreen=text!
    println(currentScreen)
    groupConversation=[]
    var messageDisplayOne = PFQuery(className:currentScreen)
    messageDisplayOne.selectKeys(["userPost"])
    messageDisplayOne.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil{
            println("Type message \(groupConversation)")
            for object in objects {
                var textObject = object["userPost"] as String
                groupConversation.append(textObject)

            }
        } else {
            // Log details of the failure

        }
    }
}

正如 Rakeshbs 在评论中所说,这里发生的是您的查询正在后台线程上执行。这意味着您的视图在查询 returns 之前加载并执行其回调(加载数据)。

为了解决这个问题,我们可以在成功回调结束时使用 tableview.reloadData 来在我们处理完数据后重新加载 table。代码如下:

注意:请参阅 Rakeshbs 答案以获得更清晰的版本,这里唯一的区别是我解包了 UIStoryboardSegue,因为已知在某些情况下访问属性时解包会导致问题。

override func prepareForSegue(segue: UIStoryboardSegue!, sender:AnyObject?){
    var cell = sender as UITableViewCell
    var text = cell.textLabel!.text
    currentScreen=text!
    println(currentScreen)
    groupConversation=[]
    var messageDisplayOne = PFQuery(className:currentScreen)
    messageDisplayOne.selectKeys(["userPost"])
    messageDisplayOne.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil{
                println("Type message \(groupConversation)")
            for object in objects {
                var textObject = object["userPost"] as String
                groupConversation.append(textObject)

            }
            var destinationController = segue.destinationViewController as UITableViewController
            destinationController.tableView.reloadData()
        } else {
            // Log details of the failure

        }
    }
}

您正在进入 UITableViewController 吗?

override func prepareForSegue(segue: UIStoryboardSegue!, sender:AnyObject?){
    //Start Spinner
    var cell = sender as UITableViewCell
    var text = cell.textLabel!.text
    currentScreen=text!
    println(currentScreen)
    groupConversation=[]
    var messageDisplayOne = PFQuery(className:currentScreen)
    messageDisplayOne.selectKeys(["userPost"])
    messageDisplayOne.findObjectsInBackgroundWithBlock {
        (objects: [AnyObject]!, error: NSError!) -> Void in
          //Stop Spinner
          if error == nil{
            println("Type message \(groupConversation)")
            for object in objects {
                var textObject = object["userPost"] as String
                groupConversation.append(textObject)

            }
            var tableViewController = segue.destinationViewController as UITableViewController
            tableViewController.tableView.reloadData()

        } else {
            // Log details of the failure

        }

    }
}