2015-04-27 3 views
0

У меня есть tableView, который содержит элементы массива. Этот массив заполняется PFQuery. После запроса массив сортируется по нескольким критериям. Я хочу, чтобы все это произошло в viewDidLoad, прежде чем они появятся в tableView. Тем не менее, единственный способ заставить его заполнить таблицуView - это, если это происходит с закрытием findObjectsInBackground. Если это произойдет после этого, запрос не завершится, и поэтому массив пуст. Я попытался посмотреть различные материалы на очереди отправки, и мне кажется, что эти задачи нужно выполнять последовательно, но я не могу понять, как это сделать. Вот соответствующий код.reload tableView AFTER Запрос запроса (последовательная очередь?)

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() 
    } 
} 
Смежные вопросы