Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS标签不使用Swift中的函数更新文本_Ios_Swift_Uiviewcontroller_Uilabel - Fatal编程技术网

iOS标签不使用Swift中的函数更新文本

iOS标签不使用Swift中的函数更新文本,ios,swift,uiviewcontroller,uilabel,Ios,Swift,Uiviewcontroller,Uilabel,这个看似简单的问题让我疯狂。。。我正在使用SwiftyJSON获取远程数据,下面是我在Swift中的ViewController类的一个片段: override func viewDidLoad() { super.viewDidLoad() self.statusLabel.text = "welcome" RemoteDataManager.getStatusUpdateFromURL { (statusData) -> Void in le

这个看似简单的问题让我疯狂。。。我正在使用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文本设置为“欢迎”,但之后不会更改。有趣的是,我用
println()
func getMostRecentStatusUpdate(:)
中放入的任何内容都会正确地打印到控制台,即使它来自远程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
        }
    }
}

太棒了,工作起来很有魅力!我学到了一些新的东西。。。谢谢对于Swift 3,使用DispatchQueue.main.async而不是dispatch_async(dispatch_get_main_queue())@Peter,即使我也遇到了同样的问题,但我的代码有点不同。我正在为标签指定一个静态文本,但它正在显示一些其他文本。“我从情节提要中删除了标签,并在同一个位置添加了新标签,连接到旧插座。”在我的案例中,它起了作用,我明白了。。。问题其实是一样的。我的问题是谷歌没有引导我找到答案,大多数答案只是关于如何更新文本标签。但如果您愿意,可以将其删除。