Health Kit 统计查询 - 是否包含来自自己来源的条目?

Vaz*_*zyb 2 ios healthkit

我发现,从 HealthKit 中获取膳食卡路里等总和将返回一个值,该值会自动减去我自己的应用程序中的条目。这很棒,也是我想要的行为,但这种情况并不总是发生 - 有时它包括我从自己的应用程序中创建的条目。这使得在不遍历每个对象的情况下无法明智地使用 HealthKit 统计查询结果。

predicate = [HKQuery predicateForSamplesWithStartDate:[date dateByAddingTimeInterval:-queryLatencyPeriod] endDate:nil options:0];

HKStatisticsQuery *sumQuery;

sumQuery = [[HKStatisticsQuery alloc] initWithQuantityType:[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierDietaryEnergyConsumed] quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {
    float calories = [[result sumQuantity] doubleValueForUnit:[HKUnit calorieUnit]];
}];
Run Code Online (Sandbox Code Playgroud)

有时这包括我的应用程序的条目总数,有时则不包括。就那么简单。我认为这是 HealthKit 中的一个错误。

All*_*lan 6

统计查询来自多个来源的聚合样本。当来自两个不同来源的累积类型样本在时间上重叠时,HealthKit 会选择使用一个来源。源的优先级根据样本类型在“健康”应用程序中该样本类型的“共享数据”视图上表格的“数据源”部分中列出的顺序来确定。

我怀疑当您看到来自您自己的应用程序的样本没有被计算在内时,实际上是因为来自另一个来源的样本与它们重叠。

  • 在为查询编写谓词时,您可以指定样本必须属于哪个源。请参阅 HKQuery.h 中的 predicateForObjectsFromSources:。 (2认同)