iOS 标签不使用 Swift 中的函数更新文本
iOS label does not update text with function in Swift
这个看似简单的问题让我发疯...我正在使用 SwiftyJSON 来获取远程数据,这是我在 ViewController class 中的片段 Swift:
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()
中放入的任何内容都会正确打印到控制台,即使它来自远程 json 源(即我知道此功能有效)。我的问题是我无法将文本打印到 UILabel 而不是控制台。我没有收到任何错误消息。
我还不太熟悉 MyClass.myMethod { (myData) -> Void in .... }
之类的 Swift 函数,我不明白这里出了什么问题。有什么想法吗?
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
}
}
}
这个看似简单的问题让我发疯...我正在使用 SwiftyJSON 来获取远程数据,这是我在 ViewController class 中的片段 Swift:
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()
中放入的任何内容都会正确打印到控制台,即使它来自远程 json 源(即我知道此功能有效)。我的问题是我无法将文本打印到 UILabel 而不是控制台。我没有收到任何错误消息。
我还不太熟悉 MyClass.myMethod { (myData) -> Void in .... }
之类的 Swift 函数,我不明白这里出了什么问题。有什么想法吗?
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
}
}
}