这个看似简单的问题让我发疯......我正在使用 SwiftyJSON 来获取远程数据,这是我在 Swift 中的 ViewController 类的片段:
override func viewDidLoad() {
super.viewDidLoad()
self.statusLabel.text = "welcome"
RemoteDataManager.getStatusUpdateFromURL { (statusData) -> Void in
let json = JSON(data: statusData)
self.statusLabel.text = "this does not work"
self.statusLabel.text = self.getMostRecentStatusUpdate(json) // also does not work
}
}
statusLabel 文本设置为“welcome”,但之后不会更改。有趣的是,我放进去的任何东西func getMostRecentStatusUpdate(_:)
with println()
正确地打印到控制台,即使它来自远程 json 源(即我知道这个函数可以工作)。我的问题是我无法将文本打印到 UILabel 而不是控制台。我没有收到任何错误消息。
我还不太熟悉像这样的 Swift 函数MyClass.myMethod { (myData) -> Void in .... }
我不明白这里出了什么问题。有任何想法吗?
UIKit
不是线程安全的,只能从主线程更新。下载是在后台线程上完成的,您无法从那里更新 UI。尝试:
override func viewDidLoad() {
super.viewDidLoad()
self.statusLabel.text = "welcome"
RemoteDataManager.getStatusUpdateFromURL { (statusData) -> Void in
let json = JSON(data: statusData)
dispatch_async(dispatch_get_main_queue()) {
self.statusLabel.text = "this does not work"
self.statusLabel.text = self.getMostRecentStatusUpdate(json) // also does not work
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)