2016-03-26 12 views
1

Wir Laden von Daten über REST Anruf:Swift UITableView reload() UI Verhalten

let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
    //Update data store…. 
    self.tableView.reloadData() 
}) 
task.resume() 

Die Daten in dem Raster nicht jedoch gezeigt wird. Sie müssen im Simulator auf das Gitter klicken - wenn Sie dies tun, werden die Daten angezeigt. Was fehlt uns hier, um die Daten automatisch ohne Interaktion mit der Benutzeroberfläche zu laden?

Antwort

4

Die Methode reloadData() muss im Hauptthread ausgeführt werden. dataTaskWithRequest(_ request: NSURLRequest) läuft in einem Hintergrund thread:

let task = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

    dispatch_async(dispatch_get_main_queue(),{ 
     //Update data store…. 
     self.tableView.reloadData() 
    }) 

}) 

task.resume() 
+0

Funktioniert dank. Eine Sache - Ich lege die Aktualisierung des Datenspeichers außerhalb/über dem Dispatch_async-Aufruf. –

+0

@MarcusLeon Keine Sorge, nur UI-Tasks müssen im Hauptthread laufen. – angeldev

2

Der Beendigungshandler wird auf einem Hintergrundthread aufgerufen. Sie müssen reloadData auf dem Haupt-Thread/der Warteschlange aufrufen.

Verwandte Themen