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 设为持久实例 属性。

另请注意,您不知道数据将传送到哪个队列。您需要跳出到主队列才能与界面对话,但您没有做到这一点。