问题
let url = NSURL(string: "http://api.mdec.club:3500/news?")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {
(data, response, error) in
self.jsonResult = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSMutableArray
self.tableView.reloadData()
}
task.resume()
I don't understand why I'm getting this error. I have to put the reloadData()
method inside task
because I have to wait till the get the data. How else can I reload the table view without getting this error?
回答1:
How else can I reload the table view without getting this error?
You step out to the main thread in order to call reloadData
, like this:
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {
(data, response, error) in
self.jsonResult = try! NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSMutableArray
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
Always do that any time you touch the interface from code that was called on a background thread. You must never never never never touch the interface except on the main thread.
来源:https://stackoverflow.com/questions/33715819/this-application-is-modifying-the-autolayout-engine-from-a-background-thread-i