Как запросить частоту сердечных сокращений в HealthKit, чтобы получить как традиционные образцы HKQuantitySample, так и образцы совокупного количества?
В моем запросе частоты пульса ниже используется более старый традиционный
HKSampleQuery
чтобы получить частоту пульса, однако, если приложение сохраняет частоту пульса в Apple Health в качестве, то мой запрос ниже не захватывает все частоты пульса внутри
HKCumulativeQuantitySample
. Как я могу запросить, чтобы я мог захватывать оба типа образцов сердечного ритма в Apple Health?
class func getHeartRateSamplesFrom(workout: HKWorkout, handler: @escaping ([HKQuantitySample]?, WorkoutManagerError?) -> Void) {
guard let heartRateType:HKQuantityType = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate) else { return }
//predicate
let startDate = workout.startDate
let endDate = workout.endDate
let predicate = HKQuery.predicateForSamples(withStart: startDate, end: endDate, options: .strictStartDate)
//descriptor
let sortDescriptors = [
NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false)
]
let heartRateQuery = HKSampleQuery(sampleType: heartRateType,
predicate: predicate,
limit: (HKObjectQueryNoLimit),
sortDescriptors: sortDescriptors)
{ (query:HKSampleQuery, results:[HKSample]?, error:Error?) -> Void in
guard error == nil else { print("get heart rate error"); return }
guard let unwrappedResults = results as? [HKQuantitySample] else { print("get heart rate error"); return}
handler(unwrappedResults, nil)
}
HealthStoreSingleton.sharedInstance.healthStore.execute(heartRateQuery)
}
1 ответ
Просто замените использование
HKSampleQuery
с
HKQuantitySeriesSampleQuery
. Это даст вам все значения, соответствующие вашему предикату, независимо от того, являются ли они частью серии.
Это можно использовать для всех типов количества, поэтому, если вы когда-либо запрашивали отдельные значения
HKQuantityType
, вы, как правило, сначала захотите выполнить этот запрос.