Эффективный анализ результатов 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 обратных вызовов.

Другие вопросы по тегам