我试图显示用户所采取的每日步数。 但是,我真的不知道如何管理它。
我已经有了这段代码:
let endDate = NSDate()
let startDate = NSCalendar.currentCalendar().dateByAddingUnit(.CalendarUnitMonth, value: -1, toDate: endDate, options: nil)
let weightSampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: .None)
let query = HKSampleQuery(sampleType: weightSampleType, predicate: predicate, limit: 0, sortDescriptors: nil, resultsHandler: {
(query, results, error) in
if results == nil {
println("There was an error running the query: \(error)")
}
dispatch_async(dispatch_get_main_queue()) {
var dailyAVG = Int()
var steps = results as [HKQuantitySample]
for var i = 0; i < results.count; i++
{
//results[i] add values to dailyAVG
}
}
})
self.healthKitStore.executeQuery(query)
据我所知,查询获取了所需的所有数据。但我不知道如何从HKQuantitySample中获取价值。所以我不能测试HKQuantitySample数组中是否有正确的值。
答案 0 :(得分:9)
如果其他人试图以一种不那么可怕的方式解决这个问题......
此时,使用HKStatisticsQuery
或HKStatisticsCollectionQuery
可能无法获得平均步数。您只能在离散数据类型上使用HKStatisticsOptionDiscreteAverage
。如果您查看HKTypeIdentifiers
的标头,您会看到HKQuantityTypeIdentifierStepCount
是累积数据类型。
如果您尝试获取平均步数,Xcode会吐出: 统计选项HKStatisticsOptionDiscreteAverage与累积数据类型HKQuantityTypeIdentifierStepCount不兼容
获取用户执行的总步骤数。您可以指定两个日期之间的时间段。将总步数除以两天之间的天数。
答案 1 :(得分:2)
您需要遍历steps
而不是results
,然后使用每个HKQuantitySample
结果的quantity
属性来获取该示例中的步骤数,例如:
var dailyAVG:Double = 0
for steps in results as [HKQuantitySample]
{
// add values to dailyAVG
dailyAVG += steps.quantity.doubleValueForUnit(HKUnit.countUnit())
}