5

我正在尝试显示用户每天的步数。但我真的不知道如何管理这个。

我已经得到了这个代码:

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数组中是否有正确的值。

4

2 回答 2

10

万一其他人试图以不那么可怕的方式解决这个问题......

目前,它看起来不像使用HKStatisticsQueryHKStatisticsCollectionQuery无法获得平均步数。您只能HKStatisticsOptionDiscreteAverage在离散数据类型上使用。如果您查看 的标题HKTypeIdentifiers,您将看到它HKQuantityTypeIdentifierStepCount是一种累积数据类型。

如果您尝试获取平均步数,Xcode 会吐出: 统计选项 HKStatisticsOptionDiscreteAverage 与累积数据类型 HKQuantityTypeIdentifierStepCount 不兼容

最佳解决方案

获取用户已采取的总步数。您可以指定两个日期之间的时间段。将总步数除以两个日期之间的天数。

于 2015-03-06T06:48:18.050 回答
2

您需要遍历stepsnotresults然后使用每个HKQuantitySample结果的quantity属性来获取该示例中的步骤数,例如:

var dailyAVG:Double = 0
for steps in results as [HKQuantitySample]
{
   // add values to dailyAVG
   dailyAVG += steps.quantity.doubleValueForUnit(HKUnit.countUnit())
}
于 2015-02-02T21:03:08.907 回答