2015-02-02 2 views
3

Im пытается отобразить ежедневное количество шагов, которые пользователь делает. Но я не знаю, как это можно сделать.Как я могу получить среднесуточные этапы формы HealthKit

Я уже получил этот код:

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

Так какова ваша конкретная проблема? Какая часть вашего кода не работает и каким образом не являются результатом того, что вы ожидаете? –

+0

У меня действительно проблема, я просто застрял. Я не знаю, как получить доступ/добавить дату, хранящуюся в массиве HKQuantitySample – Egghead

+0

Получаете ли вы все данные, как ожидалось из вашего запроса? Единственная часть, с которой вы боретесь с этим циклом? Вам действительно нужно обновить свой вопрос, чтобы сделать его более конкретным, если вы хотите, чтобы люди вам помогли ... –

ответ

2

Вы должны перебрать steps не results, а затем использовать quantity свойство каждого HKQuantitySample результате, чтобы получить число шагов в этом образце, например:

var dailyAVG:Double = 0 
for steps in results as [HKQuantitySample] 
{ 
    // add values to dailyAVG 
    dailyAVG += steps.quantity.doubleValueForUnit(HKUnit.countUnit()) 
} 
8

В случае, если кто-то пытается решить эту проблему в не так страшно ...

В настоящее время это не похоже на использование HKStatisticsQuery или HKStatisticsCollectionQuery возможно для получения среднего количества шагов. Вы можете использовать только HKStatisticsOptionDiscreteAverage по типу дискретных данных. Если вы посмотрите на заголовок для HKTypeIdentifiers, вы увидите, что HKQuantityTypeIdentifierStepCount является совокупным типом данных.

Если попытаться извлечь среднее количество шагов, Xcode выплевывает: Статистика опция HKStatisticsOptionDiscreteAverage не совместим с кумулятивного типа данных HKQuantityTypeIdentifierStepCount

Лучшее решение

Получить общее количество шагов пользователь взял , Вы можете указать период времени между двумя датами. Разделите общее количество шагов тем, сколько дней осталось между двумя датами.

+0

Это решение работает, но есть одна проблема в этом вопросе ... Это не означает, что каждый день у вас есть образец, но в целом вы делите на количество дней, что не является хорошим результатом. Представьте, что у вас есть 700 шагов в понедельник и никаких шагов в течение остальной части недели, и в результате вы получаете 100 шагов в день ... Это может быть не лучшим результатом для некоторых приложений. – cojoj

Смежные вопросы