在Swift中实时更新UILabel

时间:2015-02-08 19:45:12

标签: ios iphone swift

我正在尝试更新queryPedometerDataFromDate(..)方法的处理程序内的UILabel文本。 UILabel的更新在20或25秒后反映出来。但我几乎实时看到println()输出。有没有办法让它更快? 如果我在此处理程序之外更新UILabel的文本,那么它会再次实时更新。

        pedoman.queryPedometerDataFromDate(yester, toDate: now) {
        (data:CMPedometerData!, errr:NSError!) -> Void in
        //Below statement take 20 to 30 second to reflect on UILabel
        self.StringSteps.text = data.numberOfSteps.stringValue
        //Below statement prints on Output in real time.
        println("Number of Steps \(data.numberOfSteps)")
    }

3 个答案:

答案 0 :(得分:8)

您需要在主线程上更新UILabel。

dispatch_async(dispatch_get_main_queue(), {
self.StringSteps.text = data.numberOfSteps.stringValue
});

答案 1 :(得分:3)

您提供给queryPedometerDataFromDate:toDate:withHandler:方法的块在串行队列中执行,而不是在主线程上执行。您应该从主线程进行所有UI更新。您可以使用GCD这样做:

dispatch_async(dispatch_get_main_queue(), {
   self.StringSteps.text = data.numberOfSteps.stringValue
})

答案 2 :(得分:0)

Swift 4.2

@user.tags