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()
,因为这是一个异步调用,主线程可能无法更新它,因为通常主线程是同步运行的?当你们使用这个方法时,系统会为你们处理这个问题吗?