i have tableview contains elements of array. array populated pfquery. after query, array sorted multiple criteria. want of happen in viewdidload before show in tableview. however, way can populate tableview if happens in findobjectsinbackground closure. if happens after query hasn't completed , therefore array empty. have tried looking @ various materials on dispatch queues , seems need these tasks executed serially cannot figure out how it. here relevant code.
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) object in objects! { self.buddies.append(object["buddy"] as! string) //multiple sorts of array self.tableview.reloaddata() //if reload here looks choppy because of sorts sorts can happen here same reason - because otherwise array has not been populated } } } }
instead of reloading table each element appending, go through elements, append them buddies
array, , reloaddata
. code like:
getbuddiesquery.findobjectsinbackgroundwithblock { (objects, error) -> void in if error == nil { self.buddies.removeall(keepcapacity: true) object in objects! { self.buddies.append(object["buddy"] as! string) } self.tableview.reloaddata() } }