2015-11-15 2 views
1
let url = NSURL(string: "http://api.mdec.club:3500/news?") 

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { 
    (data, response, error) in 

    self.jsonResult = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSMutableArray 

    self.tableView.reloadData() 
} 

task.resume() 

Я не понимаю, почему я получаю эту ошибку. Я должен положить метод reloadData() внутри task, потому что мне нужно подождать, пока не получите данные. Как еще я могу перезагрузить представление таблицы, не получив эту ошибку?Это приложение модифицирует двигатель автозапуска из фоновой резьбы - ios9

ответ

1

Как еще можно перезагрузить представление таблицы без получения этой ошибки?

Вы выходите в основной поток, чтобы позвонить reloadData, как это:

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { 
    (data, response, error) in 
    self.jsonResult = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSMutableArray 
    dispatch_async(dispatch_get_main_queue()) { 
     self.tableView.reloadData() 
    } 
} 

Всегда делать любой касания интерфейса из кода, который был назван в фоновом потоке. Вы никогда не должны никогда не касаться интерфейса, кроме основного потока.

+1

На самом деле, не очень разумно модифицировать 'self.jsonResult' в фоновом потоке, так что вы можете захотеть поместить строки _both_ внутри вызова' dispatch_async'. – matt

+0

это работает спасибо! Принять ответ через 4 минуты. ;) – Schuey999

+0

matt вы можете объяснить, почему именно так я знаю, почему я делаю то, что я делаю, если я поставлю jsonResult в диспетчере – Schuey999

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

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