2015-12-15 3 views
-2

Когда я загружаю файл JSON внутри своего UITableViewController, он загружает и обновляет свой источник данных и просматривает, но только обновляет его, когда касаюсь моего экрана.Swift 2.0 iOS9 Обновление UITableView не отображает

Загрузка и синтаксический анализ кода я использую выглядит следующим образом:

func fetchData() { 

    let jsonUrl = 'http://myrestserver.com/apicall' 
    let session = NSURLSession.sharedSession() 
    let urlObject = NSURL(string: jsonUrl) 

    let task = session.dataTaskWithURL(urlObject!) { 
     (data, response, error) -> Void in 
      do { 
       let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary 

       var items :[Article] = [] 

       let jsonItems = jsonData["channel"] as! NSArray 

       for (_, item) in jsonItems.enumerate() { 

        let article = Article()   
        article.id = item["id"] as? String 
        article.title = item["title"] as? String 
        article.guid = item["guid"] as? String 

        items.append(article) 
       } 

       self.articles.insertContentsOf(items, at: 0) 

      } catch { 
       print("error fetchData") 
      } 
     } 

     task.resume() 
     self.tableView.reloadData() 
    } 

Есть ли способ я не в курсе, чтобы справиться с этой повторной визуализации? Я пытался вынести методы UITableViewCell, как описано здесь: setNeedsLayout and setNeedsDisplay

Но не повезло, кто-то может объяснить, что это лучшая практика для предоставления новых записей?

С наилучшими пожеланиями, Jos

+0

ты назвать 'reloadData'? Вы назвали это основной темой? – luk2302

+2

Вы обновляете свой интерфейс в основной теме? – Blaszard

+1

Обновите свой вопрос соответствующим кодом. – rmaddy

ответ

2

После того как вы разобрали попробовать JSON добавив следующие

dispatch_async(dispatch_get_main_queue(),{ 
    myTableView.reloadData() //myTableView = your table view instance 
}) 
+1

Добавление асинхронной отправки было правильным способом. Это заставило меня с любопытством узнать больше о том, почему и когда использовать такой код: Через этот комментарий я нашел довольно хороший ответ, чтобы начать: http://stackoverflow.com/a/12693409/575392 –

3

@nwales правильно, хотя я рекомендовал бы знакомясь с наблюдателями недвижимости для перезагрузки данных. Как только ваши данные будут перезагружены, просто обновите свое свойство, и оно автоматически запустит ваше обновление.

var data: [String] = [""] { 
    didSet { 
     // you could call a function or just reload right here  
     self.tableView.reloadData() 
    } 
} 

используя @nwales метод:

var data: [String] = [""] { 
     didSet {  
      dispatch_async(dispatch_get_main_queue(),{ 
       myTableView.reloadData() 
      }) 
     } 
} 
Смежные вопросы