Как прочитать данные артериального давления для HealthKit в iOS?

У меня возникли проблемы с тем, чтобы понять, как читать данные артериального давления в HealthKit, особенно потому, что понимание того, как HKCorrelationQuery работает для артериального давления для Objective C, недостаточно документировано на веб-сайте разработчика или в учебных пособиях.


person Oliver S    schedule 26.01.2016    source источник


Ответы (2)


Я использовал следующий код для чтения данных артериального давления через 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];

}
person Oliver S    schedule 26.01.2016

Вы можете считывать значения систолического и диастолического давления непосредственно из записей 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
      });
}

Затем вам просто нужно немного покопаться, чтобы получить любую информацию, которую вы хотите, от этих объектов, как сказал Оливер.

person Evan R    schedule 25.03.2016