Эффективный анализ результатов HKSampleQuery для HealthKit на iOS
Мое приложение использует платформу HealthKit для получения данных о здоровье пользователя. Я хочу получить около 25 различных точек данных из HealthKit.
Для этого у меня сейчас 25 звонков в for-loop
внутри обработчика завершения для примера запроса. Есть ли способ объединить результаты или сделать этот процесс более эффективным?,
Насколько мне известно, это то, как я должен это сделать (см. Код ниже). Заранее спасибо.
NSDate *startDate, *endDate;
// Use the sample type for step count
HKSampleType *sampleType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
// Create a predicate to set start/end date bounds of the query
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];
// Create a sort descriptor for sorting by start date
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:YES];
HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:sampleType predicate:predicate limit:HKObjectQueryNoLimit sortDescriptors:@[sortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
if (!error && results) {
for (HKQuantitySample *samples in results) {
// your code here
}
}
}];
// Execute the query
[healthStore executeQuery:sampleQuery];
1 ответ
Вы должны выполнять свои запросы параллельно. Это позволяет HealthKit эффективно выполнять ваши запросы. HealthKit выполняет оптимизацию для вас, если вы делаете это таким образом. Самый элегантный и читаемый способ сделать это, вероятно, цикл. Но написание 25 строк делает то же самое.
Вам не нужно ничего делать, чтобы получить ваши запросы в фоновой очереди. HealthKit делает это для вас.
Несколько раз спустя вы получите 25 обратных вызовов.