2016年6月30日木曜日

UITableView#reloadData()がうまく動かん

どうも、俺です。
最近はSwiftをいろいろ触っています。

さてタイトルのとおり、
例えば、NSURLSessionを使って
サーバーから取得したデータをUITableViewの各セルに表示させようとして、

  func hoge()
  {
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let request = NSURLRequest(URL: NSURL("https://xxxx.example.com"))
    let task = session.dataTaskWithRequest(request, completionHandler: self.getData)
    task.resume()
  }

  func getData(data:NSData?, res:NSURLResponse?,error:NSError?)
  {
    // ここで取得したデータをゴニョニョして...


    // ↓reload()してんのに表示変わらん!
    self.tableView.reloadData()
  } 

このような現象になっている場合。
安心してください。大丈夫です。
上記の例の場合、tableViewのreloadData()がメインスレッドから呼ばれていないことが原因なので、
reloadData()の呼び出しは


  dispatch_async(dispatch_get_main_queue(), {
    self.tableView.reloadData()
  })

こうしてやればOKです。

以上でェェェえす。

0 件のコメント: