2015-04-27 19 views
0

我有一個tableView包含數組的元素。這個數組由PFQuery填充。查詢後,該數組按多個條件排序。我希望所有這些都發生在viewDidLoad之前,它們出現在tableView中。但是,我可以讓它填充tableView的唯一方法是,如果它發生在findObjectsInBackground閉包中。如果它發生在那之後,那麼查詢沒有完成,因此數組是空的。我曾嘗試在調度隊列中查看各種資料,似乎是需要這些任務被連續執行,但我無法弄清楚如何執行。這是相關的代碼。重載tableView後解析查詢(串行隊列?)

override func viewDidLoad() { 
    super.viewDidLoad() 

    var getBuddiesQuery = PFQuery(className: "followers") 
    getBuddiesQuery.whereKey("userHasBuddy", equalTo: "yes") 
    getBuddiesQuery.findObjectsInBackgroundWithBlock { 
     (objects, error) -> Void in 
     if error == nil { 

      self.buddies.removeAll(keepCapacity: true) 

      for object in objects! { 

       self.buddies.append(object["buddy"] as! String) 

       //MULTIPLE SORTS OF ARRAY 

       self.tableView.reloadData() 

       //IF RELOAD IS HERE THEN IT LOOKS VERY CHOPPY BECAUSE OF SORTS BUT SORTS CAN ONLY HAPPEN HERE FOR SAME REASON - BECAUSE OTHERWISE THE ARRAY HAS NOT BEEN POPULATED 
      } 
     } 
    } 
} 

回答

1

相反重裝表要附加,經過所有的元素,他們全部追加到您的buddies數組,然後reloadData每個元素。所以你的代碼看起來像:

getBuddiesQuery.findObjectsInBackgroundWithBlock { 
    (objects, error) -> Void in 
    if error == nil { 

     self.buddies.removeAll(keepCapacity: true) 

     for object in objects! { 
      self.buddies.append(object["buddy"] as! String) 
     } 
     self.tableView.reloadData() 
    } 
}