Swift UITableView reloadData在闭包中

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (43)

我相信我有一个问题,我的关闭发生在后台线程上,而我的UITableView没有足够快地更新。我打电话给一个REST服务,并在我的关闭,我有一个tableView.reloadData()调用,但这需要几秒钟发生。如何更快地重新载入数据(可能在主线程上)?

REST查询功能 - 使用SwiftyJSON库进行解码

func asyncFlightsQuery() {
    var url : String = "http://127.0.0.1:5000/flights"
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: url)
    request.HTTPMethod = "GET"

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, networkData: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil


        // Parse with SwiftyJSON
        let json = JSON(data: networkData)

        // Empty out Results array
        self.resultArray = []

        // Populate Results Array
        for (key: String, subJson: JSON) in json["flights"] {
            print ("KEY: \(key) ")
            print (subJson["flightId"])
            print ("\n")

            self.resultArray.append(subJson)
        }

        print ("Calling reloadData on table..??")
        self.tableView.reloadData()


    })
}
提问于
用户回答回答于

UIKit不是线程安全的。UI只能从主线程更新:

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

更新。在Swift 3和以后使用:

DispatchQueue.main.async {
    self.tableView.reloadData()
}
用户回答回答于

像这样重新加载UITableView

self.tblMainTable.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true)

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励