У меня есть код, который запрашивает данные из Healthkit. Мы получаем различные образцы и количества из аптечки, а также недавних тренировок. На моем телефоне (обычно тренировка каждый день - хотя Basis хранит данные как несколько тренировок) запрос тренировки занимает около 8 секунд, но все остальные типы завершаются менее чем за секунду.
Похоже, что под покровом этот запрос выполняет линейное сканирование, где другие индексируются или что-то в этом роде. Интересно, сталкивался ли кто-нибудь еще с этим или есть какие-то мысли?
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:[self dateByCalculatingWithNumberOfDays:-1 date:[NSDate date]]
endDate:[NSDate date]
options:HKQueryOptionStrictStartDate | HKQueryOptionStrictEndDate];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:NO];
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:[HKSampleType workoutType]
predicate:predicate
limit:0
sortDescriptors:@[sortDescriptor]
resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
self.workoutEntries = [[NSMutableArray alloc] initWithCapacity:results.count];
for (HKWorkout *workout in results) {
WorkoutObject *workoutObject = [WorkoutObject workoutObjectWithWorkout:workout];
[self.workoutEntries addObject:workoutObject];
}
[self fetchHeartRate];
}];
[self.healthStore executeQuery:query];