У меня проблемы с попыткой выяснить, как читать данные артериального давления в HealthKit, тем более, что понимание того, как HKCorrelationQuery работает для артериального давления для Objective C, плохо документировано на веб-сайте разработчика или в учебниках.Как читать данные артериального давления для HealthKit в iOS?
3
A
ответ
3
Я использовал следующий код, чтобы прочитать данные артериального давления через HealthKit. Я обнаружил, что вы не можете читать систолические или диастолические значения напрямую. Вам нужно сделать HKCorrelationQuery для данных артериального давления, а затем для каждой корреляции вам нужно сделать рытье, чтобы, наконец, получить значение для артериального давления. Надеюсь это поможет!
- (void)readBloodPressure {
HKQuantityType *systolicType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureSystolic];
HKQuantityType *diastolicType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureDiastolic];
HKCorrelationType *bloodPressureType =
[HKCorrelationType correlationTypeForIdentifier:HKCorrelationTypeIdentifierBloodPressure];
HKCorrelationQuery *query =
[[HKCorrelationQuery alloc]
initWithType:bloodPressureType predicate:nil
samplePredicates:nil
completion:^(HKCorrelationQuery *query, NSArray *correlations, NSError *error) {
if (correlations == nil) {
// Provide proper error handling here...
NSLog(@"An error occurred while searching for blood pressure data %@",
error.localizedDescription);
abort();
}
for (HKCorrelation *correlation in correlations) {
HKQuantitySample *systolicSample = [[correlation objectsForType:systolicType] anyObject];
HKQuantity *systolicQuantity = [systolicSample quantity];
HKQuantitySample *diastolicSample = [[correlation objectsForType:diastolicType] anyObject];
HKQuantity *diastolicQuantity = [diastolicSample quantity];
double systolicd = [systolicQuantity doubleValueForUnit:[HKUnit millimeterOfMercuryUnit]];
double diastolicd = [diastolicQuantity doubleValueForUnit:[HKUnit millimeterOfMercuryUnit]];
NSLog(@"Systolic %f",systolicd);
NSLog(@"Diastolic %f",diastolicd);
NSLog(@"Date %@",systolicSample.startDate);
[self saveBloodPressureIntoApp:systolicd withDiastolic:diastolicd withDate:systolicSample.startDate];
}
}];
[self.healthStore executeQuery:query];
}
2
Вы можете прочитать систолическое и диастолическое значение непосредственно из кровяного давления из записей HealthKit:
NSSet *querySet = [NSSet setWithObjects:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureSystolic],
[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBloodPressureDiastolic], nil];
for (HKQuantityType *quantityType in querySet) {
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType predicate:nil limit:HKObjectQueryNoLimit sortDescriptors:nil resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
if (results && results.count > 0) {
dispatch_async(dispatch_get_main_queue(), ^{
// Do something with results, which will be an array of HKQuantitySample objects
});
}
Тогда вы просто должны сделать некоторые копать, чтобы получить то, что информацию вы хотите от этих объектов, как сказал Оливер.