这个看似简单的问题让我发疯了...我正在玩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(_:)
println()
MyClass.myMethod { (myData) -> Void in .... }
内的任何内容都正确打印到控制台,即使它来自远程json源(即我知道这个功能有效)。我的问题是我无法将文本打印到UILabel而不是控制台。我没有收到任何错误消息。
我还不熟悉像{{1}}那样的Swift函数,我不明白这里出了什么问题。有什么想法吗?
答案 0 :(得分:23)
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
}
}
}