我下面的心率查询使用旧的传统HKSampleQuery
来获取心率,但是,如果应用程序将心率作为HKCumulativeQuantitySample
保存到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)
}
只需将HKSampleQuery
的用法替换为HKQuantitySeriesSampleQuery
即可。这将获得与谓词匹配的所有值,无论它们是否是序列的一部分。
这适用于所有数量类型,因此,如果您要查询HKQuantityType
的单个值,通常需要先使用此查询。