为什么我的 UILabel 没有在 queryPedometerDataFromDate 中被更改?
Why isn't my UILabel being changed inside queryPedometerDataFromDate?
有谁知道为什么我无法让我的 UILabel 在 queryPedometerDataFromDate 内部进行更改,即使它会在其外部更新?在我 运行 查询之后,我正在尝试 post stepCount 到标签。起初我以为是 NSNumber 到 String 的转换问题,但两个打印语句都将相同的值打印到控制台。任何指导将不胜感激。我对这些东西很陌生。
var pedometer = CMPedometer()
@IBOutlet weak var stepsLabel: UILabel!
@IBAction func queryStepCount(sender: AnyObject) {
if CMPedometer.isStepCountingAvailable() {
let now = NSDate()
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let midnightOfToday = calendar!.startOfDayForDate(now)
var stepCount = NSNumber(integer: 0)
self.pedometer.queryPedometerDataFromDate(midnightOfToday, toDate: now, withHandler: { (CMPedometerData, error) -> Void in
stepCount = CMPedometerData!.numberOfSteps
let convertedStepCount = stepCount.stringValue
print("Converted Step Count:" + convertedStepCount)
print (stepCount)
// Why doesn't this change my label text?
self.stepsLabel.text = "CHANGED"
})
// But this does...
self.stepsLabel.text = "CHANGED"
}
如果查询未在主线程上执行,则行 self.stepsLabel.text = "CHANGED"
将不会更新 UI。试试这个...
dispatch_async(dispatch_get_main_queue(),{
self.stepsLabel.text = "CHANGED"
})
有谁知道为什么我无法让我的 UILabel 在 queryPedometerDataFromDate 内部进行更改,即使它会在其外部更新?在我 运行 查询之后,我正在尝试 post stepCount 到标签。起初我以为是 NSNumber 到 String 的转换问题,但两个打印语句都将相同的值打印到控制台。任何指导将不胜感激。我对这些东西很陌生。
var pedometer = CMPedometer()
@IBOutlet weak var stepsLabel: UILabel!
@IBAction func queryStepCount(sender: AnyObject) {
if CMPedometer.isStepCountingAvailable() {
let now = NSDate()
let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let midnightOfToday = calendar!.startOfDayForDate(now)
var stepCount = NSNumber(integer: 0)
self.pedometer.queryPedometerDataFromDate(midnightOfToday, toDate: now, withHandler: { (CMPedometerData, error) -> Void in
stepCount = CMPedometerData!.numberOfSteps
let convertedStepCount = stepCount.stringValue
print("Converted Step Count:" + convertedStepCount)
print (stepCount)
// Why doesn't this change my label text?
self.stepsLabel.text = "CHANGED"
})
// But this does...
self.stepsLabel.text = "CHANGED"
}
如果查询未在主线程上执行,则行 self.stepsLabel.text = "CHANGED"
将不会更新 UI。试试这个...
dispatch_async(dispatch_get_main_queue(),{
self.stepsLabel.text = "CHANGED"
})