我相信我有一个问题,我的关闭发生在后台线程上,并且我的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()
之后
发布于 2014-10-09 19:40:45
UIKit不是线程安全的。UI应该只从主线程更新:
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
更新。在Swift 3和更高版本中使用:
DispatchQueue.main.async {
self.tableView.reloadData()
}
发布于 2015-08-06 18:56:44
您也可以像这样重新加载UITableView
self.tblMainTable.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true)
发布于 2016-11-13 21:45:43
使用Swift 3
DispatchQueue.main.async {
self.tableView.reloadData()
}
https://stackoverflow.com/questions/26277371
复制相似问题