Ios Swift update UILabel,调度异步不工作

Ios Swift update UILabel,调度异步不工作,ios,swift,uilabel,dispatch-async,Ios,Swift,Uilabel,Dispatch Async,为什么这样不行 dispatch_async(dispatch_get_main_queue(), { self.timeStringLabel.text = "\(self.timeStringSelected)" println(self.timeStringLabel.text) }) 我试图在Swift中更新标签,但标签的UI从未更改。我一直在谷歌上搜索,但找不到任何不使用dispatch\u async的响应。我做错了什么 第一次编辑:我错了。我没有打印更新的文本。

为什么这样不行

dispatch_async(dispatch_get_main_queue(), {
    self.timeStringLabel.text = "\(self.timeStringSelected)"

    println(self.timeStringLabel.text)
})
我试图在Swift中更新标签,但标签的UI从未更改。我一直在谷歌上搜索,但找不到任何不使用dispatch\u async的响应。我做错了什么

第一次编辑:我错了。我没有打印更新的文本。文本永不改变。如果有帮助,它总是打印可选(“0”)。根据情节提要中的定义,默认值为0

我尝试过使用和不使用dispatch\u async都没有成功。我还尝试添加 self.timeStringLabel.setNeedsDisplay() 在更新文本后立即更新,但这也不起作用

编辑2:下面是完整的函数+UILabel声明

@IBOutlet weak var timeNumberLabel: UILabel!

@IBAction func timeNumberButtonPressed(sender: UIButton) {

    println("Number Selected. Tag \(sender.tag)")

    dispatch_async(dispatch_get_main_queue()) {

        self.timeNumberOneButton.selected = false
        self.timeNumberTwoButton.selected = false
        self.timeNumberThreeButton.selected = false
        self.timeNumberFourButton.selected = false

        if sender.tag == 0{
            self.timeNumberSelected = 0
        } else if sender.tag == 1 {
            self.timeNumberSelected == 5
        } else if sender.tag == 2 {
            self.timeNumberSelected == 10
        } else {
            self.timeNumberSelected == 24
        }

        sender.selected = true

        self.timeNumberLabel.text = "\(self.timeNumberSelected)"

        self.timeNumberLabel.setNeedsDisplay()


        println(self.timeNumberLabel.text)
    }
}
如图所示,标签清晰可见。我不认为实施起来会这么难,但我错了。我敢打赌,我错过了一些非常简单的东西

尝试添加行

self.timeStringLabel.setNeedsDisplay()
(标签更改后)

因为代码是异步运行的,所以接口更新方法可能会错过更改,而不会显示它(特别是在标签更改之前出现耗时的代码位时)。添加此代码将强制界面检查并显示可能遗漏的任何更改

这应该在更改接口的任何异步任务之后使用,因为任务的运行可能与接口方法重叠,从而导致丢失更改


*多亏了

的帮助,您是否尝试过在不使用dispatch\u async的情况下执行此操作?是否可以包含您的周围代码?所以,我们知道你想做什么。你确定标签不是零吗?你为什么在那里使用
dispatch\u asnyc
?我看不出有必要这样做。您是否正确使用自动布局?你确定你的标签在屏幕的可见部分吗?为什么我们需要调用你的代码行?如果您能提供更多信息,我们将不胜感激。我的意思是,我们需要调用什么场景
setNeedsDisplay()
?我通常会像OP那样做。奇怪的是,它在更新之前似乎并没有很长的过程。那么,让我来描述一下。您需要包括
setNeedsDisplay()
,因为这是一个异步调用,主线程可能无法更新它,因为通常主线程是同步运行的?当你们使用这个方法时,系统会为你们处理这个问题吗?