queryPedometerData returns 零步,即使记录了步数
queryPedometerData returns nil steps even if there are steps logged
我想检索 1 小时前的步数。我不需要做任何特别的事情,我只需要知道用户自上一小时以来完成了多少步。
即使我的 iPhone 记录了一些步数,检索步数的查询 returns "nil"。
这是代码:
let calendar = Calendar.current //calendar now, to be used in calculating the h in the past
let beforeDate = calendar.date(byAdding: .hour, value: -1, to: Date())
let pedometer = CMPedometer() //define pedometer
if CMPedometer.isStepCountingAvailable() == true {print("steps available")}else{print("steps not available")}
pedometer.queryPedometerData(from: beforeDate!, to: Date(), withHandler: { (pedometerData, error) in
if let pedData = pedometerData{
self.dateLabel.text = "Steps:\(pedData.numberOfSteps)"
}else {
self.dateLabel.text = "error)"
print(beforeDate)
}
})
}
这是我在查询中输入的日期格式:
2018-03-16 12:59:17 +0000
怎么了?
一个可能的问题是您的 CMPedometer 对象仅存储在局部变量中。 pedometer.queryPedometerData
异步运行,因此该对象需要持续足够长的时间才能完成查询。但如果它是一个局部变量,它就不能这样做;它甚至在获取数据之前就消失了。尝试将 pedometer
设为持久实例 属性。
另请注意,您不知道数据将传送到哪个队列。您需要跳出到主队列才能与界面对话,但您没有做到这一点。
我想检索 1 小时前的步数。我不需要做任何特别的事情,我只需要知道用户自上一小时以来完成了多少步。
即使我的 iPhone 记录了一些步数,检索步数的查询 returns "nil"。
这是代码:
let calendar = Calendar.current //calendar now, to be used in calculating the h in the past
let beforeDate = calendar.date(byAdding: .hour, value: -1, to: Date())
let pedometer = CMPedometer() //define pedometer
if CMPedometer.isStepCountingAvailable() == true {print("steps available")}else{print("steps not available")}
pedometer.queryPedometerData(from: beforeDate!, to: Date(), withHandler: { (pedometerData, error) in
if let pedData = pedometerData{
self.dateLabel.text = "Steps:\(pedData.numberOfSteps)"
}else {
self.dateLabel.text = "error)"
print(beforeDate)
}
})
}
这是我在查询中输入的日期格式:
2018-03-16 12:59:17 +0000
怎么了?
一个可能的问题是您的 CMPedometer 对象仅存储在局部变量中。 pedometer.queryPedometerData
异步运行,因此该对象需要持续足够长的时间才能完成查询。但如果它是一个局部变量,它就不能这样做;它甚至在获取数据之前就消失了。尝试将 pedometer
设为持久实例 属性。
另请注意,您不知道数据将传送到哪个队列。您需要跳出到主队列才能与界面对话,但您没有做到这一点。