这是在我的viewDidLoad方法中 http://i.imgur.com/zTD7wHr.png
这是我的第一篇文章,所以stackoverflow不会让我发布图片我想我只需要删除此链接。
基本上,我正在尝试使用上面的代码从位于此处的(?!(if|else|while)\b)\b\w+
分配文本:http://catfacts-api.appspot.com/api/facts。我已经通过json
行的断点查看了Xcode中的值,self.catLabel.text = catFactArray[0] as? String
字符串具有我想要的值,但标签不会更新。我已经和几个人讨论了这个问题,我真的不确定问题出在哪里,所以任何帮助都会受到赞赏。
答案 0 :(得分:2)
如果您在后台进行任何网络操作并想要更新UI,那么这些UI更新应该在主线程上完成。
试试吧。
dispatch_async(dispatch_get_main_queue(), {
self.catLabel.text = catFactArray[0] as? String
self.view.setNeedsDisplay()
self.catLabel.setNeedsDisplay()
})
答案 1 :(得分:0)
您的UI布局更新(标签文本更改,框架修改......)必须是主线程,在您的代码中进行网络调用,它可能在后台线程中启动:
let url = NSURL(string: "http://catfacts-api.appspot.com/api/facts")
let request = NSURLRequest(URL: url!)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request, completionHandler : { data, response, error in
if let feed = (try? NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers)) as! NSDictionary! {
if let catFactArray = feed.valueForKeyPath("facts") as! NSArray! {
if !NSThread.isMainThread {
print("Yes , I'm not in the main thread..")
}
dispatch_async(dispatch_get_main_queue(), {
print("Now I'm in the main thread..")
self.catLabel.text = catFactArray[0] as? String
self.view.setNeedsDisplay()
self.catLabel.setNeedsDisplay()
self.catLabel.layoutIfNeeded()
}
}
}
})
task.resume()