我相信我遇到了一个问题,即我的关闭发生在后台线程上,而UITableView的更新速度不够快。我正在打电话给REST服务,而在关闭时,我有一个tableView.reloadData()电话,但是要花几秒钟的时间才能发生。如何使数据重新加载更快(也许在主线程上?)
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()在调试器中调用一次
self.tableView.reloadData()
UIKit不是线程安全的。UI仅应从主线程更新:
dispatch_async(dispatch_get_main_queue()) { self.tableView.reloadData() }
更新 。在Swift 3及更高版本中使用:
DispatchQueue.main.async { self.tableView.reloadData() }