3

我的应用程序使用 HealthKit 框架来检索用户健康数据。我想从 HealthKit 中获得大约 25 个不同的数据点。

为此,我目前for-loop在示例查询的完成处理程序中进行了 25 次调用。有什么方法可以组合结果,或者更有效地完成这个过程?.

据我所知,这就是我必须这样做的方式(参见下面的代码)。先感谢您。

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];
4

1 回答 1

3

您应该并行执行查询。这使 HealthKit 能够有效地执行您的查询。如果您这样做,HealthKit 会为您进行优化。最优雅、最易读的方法可能是循环。但是写 25 行也是一样的。

您无需执行任何操作即可将查询放入后台队列。HealthKit 会为您做到这一点。

一段时间后,您将收到 25 个回调。

于 2016-10-28T21:44:17.643 回答