2016-03-26 6 views
1

Мы загружаются данные с помощью REST вызова:Swift UITableView reloadData() поведение пользовательского интерфейса

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

Данные в сетке не показано, однако. Вы должны щелкнуть по сетке в симуляторе - когда вы это сделаете, данные будут показаны. Что нам не хватает здесь, чтобы получить данные для автоматической загрузки без какого-либо взаимодействия с пользовательским интерфейсом?

ответ

4

Метод reloadData() должен выполняться в основном потоке. dataTaskWithRequest(_ request: NSURLRequest) работает в фоновом режиме:

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

Работы благодарности. Одна вещь - я поместил обновление хранилища данных за пределы/над вызовом dispatch_async. –

+0

@MarcusLeon Не стоит беспокоиться, только пользовательские задачи должны выполняться в основном потоке. – angeldev

2

Обработчик завершения вызова вызывается в фоновом режиме. Вы должны позвонить reloadData в основной поток/очередь.

Смежные вопросы