2016-01-26 1 views
3

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

ответ

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 
     }); 
} 

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

 Смежные вопросы

  • Нет связанных вопросов^_^