2016-05-17 3 views
2

Я разрабатываю приложение с Parse, которое имеет табличное представление с ячейками, содержащими ярлык, в котором есть общие друзья из Facebook, моя проблема в том, что все, что есть в таблице отлично работает, но знак общих друзей, это займет много времени, пока я не выберу строку (когда я выберу строку, номер появится сразу). Вот мой код для получения общих друзей и установки метки в ячейке:Ячейка в UITableView не обновляется до тех пор, пока не будет выбран в iOS (swift)

let facebookContext = driverobj?.objectForKey("facebookContext") as! String 
let user: PFUser = PFUser.currentUser()! 
let access_token = user.valueForKey("authData")?.valueForKey("facebook")?.valueForKey("access_token") as! String 
let usercontexturl: NSURL = NSURL(string: "https://graph.facebook.com/\(facebookContext)/mutual_friends?access_token=\(access_token)")! 

let myrequest: NSURLRequest = NSURLRequest(URL: usercontexturl) 
let mysession = NSURLSession.sharedSession() 
let task = mysession.dataTaskWithRequest(myrequest) { data, response, error in 
     print("Task completed") 
     do { 
      let jsonresult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) 
      cell.mutualFriendsLabel?.text = (jsonresult.valueForKey("summary")?.valueForKey("total_count"))!.stringValue + " Mutual Friends" 

     } catch { 
      print(error) 
     } 
} 
task.resume() 

Этот код находится внутри метода cellForRowAtIndexPath, а метод didSelectRowAtIndexPath пуст.

ответ

2

Блок, переданный в dataTaskWithRequest, вероятно, не выполняется в основном потоке, который может вызвать появление этих типов симптомов. Попробуйте выполнить пользовательский интерфейс обновления в главном потоке, как:

dispatch_async(dispatch_get_main_queue()) { 
    cell.mutualFriendsLabel?.text = (jsonresult.valueForKey("summary")?.valueForKey("total_count"))!.stringValue + " Mutual Friends" 
} 
+0

Это работало отлично, спасибо! –

1

Я думаю, что вам нужно обновить интерфейс на главной очереди, как это:

dispatch_async_(your_queue) { 
    task.response { 
     //handle data 
     dispatch_async(dispatch_get_main_queue()) { 
      //update UI, etc. change label text 
     } 
    } 
} 
Смежные вопросы