2015-01-02 3 views
0

Мой UITableViewController, когда первоначально просматривается, не содержит данных. Однако однажды, я перехожу к другому UIViewController, данные появляются, пока segue все еще оживляет, а затем данные есть. Поэтому, чтобы увидеть данные, мне нужно перейти в другой ViewController, а затем вернуться к UITableViewController. Я использую структуру Parse.com. Следующий код имеет начальный ViewController, который также является UITableViewController, который отделяет UITableViewController, который не содержит никаких данных изначально. Спасибо за помощь, я новичок в разработке IOS, поэтому, пожалуйста, быстро отвечайте на вопросы.
EDIT: многие ответы или комментарии предполагают, что данные извлекаются и просто не загружаются в UITableViewController. Однако проблема заключается в том, что данные не были получены к моменту завершения segue. БлагодаряUITableView Not Loading Data Первоначально

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 

     } 
    } 
} 
+0

попробуйте назвать [tableview reloadData] in viewDidAppear. – rakeshbs

+0

@rakeshbs будет выглядеть так: 'tableview.reloadData' в swift? – StevenR

+0

да. tableview.reloadData in swift – rakeshbs

ответ

0

Вы segueing в 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 

     } 

    } 
} 
+0

Да, я перехожу в UITableViewController. – StevenR

+0

затем попробуйте приведенный выше код? – rakeshbs

+0

Ну, я просто набрал это в свой собственный ответ, ха-ха. Вы можете захватить контроллер табличного представления таким образом (через destinationViewController) и перезагрузить его оттуда. Единственная вещь, которую вы можете (не уверен) сделать, это развернуть Segue, что вы можете сделать, заменив segue: UIStoryboardSegue с помощью segue: UIStoryboardSegue! в заголовке метода –

2

Как Rakeshbs говорил в комментариях, что происходит здесь в том, что ваш запрос выполняется в фоновом потоке. Это означает, что ваше представление загружается до возвращения запроса и выполняет обратный вызов (загрузка данных).

Чтобы учесть это, мы можем использовать tableview.reloadData в конце обратного вызова успеха, чтобы перезагрузить таблицу после обработки данных. Код, приведенный ниже:

ПРИМЕЧАНИЕ. См. Ответ 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 

     } 
    } 
}