此应用程序正在从后台线程修改自动布局引擎 - ios9
Posted
技术标签:
【中文标题】此应用程序正在从后台线程修改自动布局引擎 - ios9【英文标题】:This application is modifying the autolayout engine from a background thread - ios9 【发布时间】:2015-11-15 02:41:55 【问题描述】: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()
我不明白为什么会出现此错误。我必须将reloadData()
方法放在task
中,因为我必须等到获取数据。我如何才能重新加载表格视图而不会出现此错误?
【问题讨论】:
【参考方案1】:我怎样才能在不出现此错误的情况下重新加载表格视图?
你为了调用reloadData
而跳到主线程,像这样:
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()
总是在您从后台线程调用的代码中触摸界面时随时执行此操作。除了主线程之外,您永远永远永远永远不要触摸界面。
【讨论】:
实际上,在后台线程上修改self.jsonResult
也不是很明智,因此您可能希望将两行 行都放在dispatch_async
调用中。
它有效,谢谢!将在 4 分钟内接受答复。 ;)
matt 你能解释一下为什么如果我把 jsonResult 放在调度中,我就知道为什么我正在做我正在做的事情
正确的做法是在后台进行反序列化,然后在重新加载之前在主队列上分配给self.jsonResult
。
@nhgrif 很好,我没有把它逗得足够远以上是关于此应用程序正在从后台线程修改自动布局引擎 - ios9的主要内容,如果未能解决你的问题,请参考以下文章
iOS9 此应用程序正在从后台线程修改自动布局引擎,这可能导致引擎损坏和奇怪的崩溃