问题描述
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()
在调试器中调用一次