更改文本值后,我的UILabel没有更新

时间:2016-05-20 16:49:22

标签: swift uilabel

这是在我的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字符串具有我想要的值,但标签不会更新。我已经和几个人讨论了这个问题,我真的不确定问题出在哪里,所以任何帮助都会受到赞赏。

2 个答案:

答案 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()