微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

闭包中的Swift UITableView reloadData

如何解决闭包中的Swift UITableView reloadData

UIKit不是线程安全的。UI仅应从主线程更新:

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

。在Swift 3及更高版本中使用:

dispatchQueue.main.async {
    self.tableView.reloadData()
}

解决方法

我相信我遇到了一个问题,即我的关闭发生在后台线程上,而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()


    })
}

self.tableView.reloadData()在调试器中调用一次

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。