Last active
August 29, 2015 14:06
-
-
Save jault3/78a001b891c34ee8350a to your computer and use it in GitHub Desktop.
Populate Weight from HealthKit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
HKQuantityType *weightType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass]; | |
// Since we are interested in retrieving the user's latest sample | |
// we sort the samples in descending order by end date | |
// and set the limit to 1 | |
// We are not filtering the data, and so the predicate is set to nil. | |
NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO]; | |
// construct the query & since we are not filtering the data the predicate is set to nil | |
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:weightType predicate:nil limit:1 sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) { | |
// if there is a data point, dispatch to the main queue | |
if (results) { | |
dispatch_async(dispatch_get_main_queue(), ^{ | |
HKQuantitySample *quantitySample = results.firstObject; | |
// pull out the quantity from the sample | |
HKQuantity *quantity = quantitySample.quantity; | |
HKUnit *weightUnit = [HKUnit poundUnit]; | |
double usersWeight = [quantity doubleValueForUnit:weightUnit]; | |
_txtWeight.text = [NSString stringWithFormat:@"%@ lbs", [NSNumberFormatter localizedStringFromNumber:@(usersWeight) numberStyle:NSNumberFormatterNoStyle]]; | |
}); | |
} | |
}]; | |
// do not forget to execute the query after its constructed | |
[_healthStore executeQuery:query]; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, I follow almost all code from you post. However, my program did not really "execute" the query. I write some NSLog (before if (results)) and debug to check and found that it never really run the code in query block.