Ios Swift:tableView.reloadData()太慢了

Ios Swift:tableView.reloadData()太慢了,ios,uitableview,swift,reload,Ios,Uitableview,Swift,Reload,我试图在一个异步请求之后执行一个tableView.reloadData()调用,我调用该请求来填充我的UITableView。表格在15-20秒后显示数据,除非我手动开始滚动,在这种情况下,所有数据都会立即加载。所以数据确实存在,只是没有正确加载。我能做些什么来解决这个问题 var jsonLoaded:Bool = false { didSet { if jsonLoaded { tableView.reloadDat

我试图在一个异步请求之后执行一个
tableView.reloadData()
调用,我调用该请求来填充我的
UITableView
。表格在15-20秒后显示数据,除非我手动开始滚动,在这种情况下,所有数据都会立即加载。所以数据确实存在,只是没有正确加载。我能做些什么来解决这个问题

var jsonLoaded:Bool = false {
        didSet {
            if jsonLoaded {

                tableView.reloadData()

            }
        }
    }

override func viewDidLoad() {
        super.viewDidLoad()

let url = NSURL(string: "https://www.googleapis.com/youtube/v3/search?part=id&q=\(searchTerm)&maxResults=1&key=AIzaSyD7PxAoq0O5hUxx775l_E_mnowlU4cUfcI")

            let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {data, response, error -> Void in

                if error != nil {

                    println(error)

                } else {

                    let jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary

                    if let items = jsonResult["items"] as? NSArray {
                        for songs in items {
                            if let id = songs["id"] as? NSDictionary {
                                if let videoId = id["videoId"] as? String {
let newURL = NSURL(string: "https://www.googleapis.com/youtube/v3/search?relatedToVideoId=\(videoId)&part=snippet&type=video&maxResults=6&key=AIzaSyD7PxAoq0O5hUxx775l_E_mnowlU4cUfcI")

                                    let newTask = NSURLSession.sharedSession().dataTaskWithURL(newURL!, completionHandler: {data, response, error -> Void in

                                        if error != nil {

                                            println(error)

                                        } else {

                                            let newJsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary
                                            if let info = newJsonResult["items"] as? NSArray {
                                                for videos in info {
                                                    if let snippet = videos["snippet"] as? NSDictionary {
                                                        if let title = snippet["title"] as? String {
                                                           self.recommendedTitles.append(title)
                                                           self.jsonLoaded = true

                                                     }
                                                }
                                           } 
                                      }
                                  })
                                  newTask.resume()
                              }
                          }
                     }
                 jsonLoaded = false
             }
          }
      }
  })
}
}

问题是您正在后台线程上设置
jsonload
。这意味着在后台线程上也会调用
reloadData()
。但是,您决不能在后台线程上与接口对话!在执行任何涉及共享数据(例如
jsonload
)或接口的操作之前,您需要跳转到主线程。

谁是表的数据源?实际上,它都在
类:SongViewController:UIViewController、UITableViewDelegate、UITableViewDataSource{}
中!dispatch_async(dispatch_get_main_queue()){}