0

我下面的心率查询使用较旧的传统HKSampleQuery来获取心率,但是,如果应用程序将心率保存到 Apple Health 中,HKCumulativeQuantitySample那么我下面的查询不会捕获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)
    }
4

1 回答 1

0

只需将您的使用替换HKSampleQueryHKQuantitySeriesSampleQuery. 这将为您提供与您的谓词匹配的所有值,无论它们是否是系列的一部分。

这可用于所有数量类型,因此如果您曾经查询 an 的单个值HKQuantityType,您通常希望首先使用此查询。

于 2021-11-22T20:33:44.970 回答