У меня возникли проблемы с тем, чтобы понять, как читать данные артериального давления в HealthKit, особенно потому, что понимание того, как HKCorrelationQuery работает для артериального давления для Objective C, недостаточно документировано на веб-сайте разработчика или в учебных пособиях.
Как прочитать данные артериального давления для HealthKit в iOS?
Ответы (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