HealthKit не в курсе
Я использую HealthKit в одном из моих приложений
Возможно, я использую его неправильно, но я обнаружил, что при чтении шагов (я не пробовал с другими данными), новые данные шага не возвращаются в моем запросе, и мне нужно открыть приложение Health, а затем открыть свое приложение для этой новой информации, которая будет возвращена запросом.
if([HKHealthStore isHealthDataAvailable])
{
HKHealthStore *healthStore = [[HKHealthStore alloc] init];
// Query for step data
HKQuantityType *stepType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
NSSet *set = [NSSet setWithArray:@[stepType]];
[healthStore requestAuthorizationToShareTypes:nil readTypes:set completion:^(BOOL success, NSError *error) {
if(success)
{
// Steps in 30 minute increments
NSDateComponents *intervalComponents = [[NSDateComponents alloc] init];
[intervalComponents setMinute:30];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startDate = [calendar startOfDayForDate:now];
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
// From the start of today until the end of today
NSPredicate *datePredicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:(HKQueryOptionStrictStartDate | HKQueryOptionStrictEndDate)];
HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:stepType
quantitySamplePredicate:datePredicate
options:(HKStatisticsOptionCumulativeSum)
anchorDate:startDate
intervalComponents:intervalComponents];
[query setInitialResultsHandler:^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *result, NSError *error) {
for(HKStatistics *statistics in result.statistics)
{
NSLog(@"%@, %@", @([statistics.sumQuantity doubleValueForUnit:[HKUnit countUnit]]), statistics.startDate);
}
}];
[healthStore executeQuery:query];
}
}];
}
1 ответ
Решение
Я тоже нашел то же самое - посмотрите следующий SO ответ
/questions/10014278/kak-zastavit-hkquery-zagruzhat-poslednie-shagi/10014284#10014284
Похоже, HealthKit периодически импортирует информацию о шагах из CoreMotion, отсюда и задержка, которую вы видите. Добавление обратного вызова для меня не сработало, так как кажется, что оно вызывается только после импорта данных шага в HealthKit