HealthKit 返回错误的健康数据(卡路里)

HealthKit Returning Wrong Health Data (Calorie)

我 6 个月前在 Apple 的开发者论坛上问过这个问题,但没有人回复。所以我希望你们能做得更好 lol

我在 WatchOS 应用程序中使用 Apple 的 HealthKit API 来检索能量指标,例如活跃能量和消耗的基础能量。我的问题是获取准确的数据。 iPhone 上的 Apple Health App 显示一个值,而通过 HealthKit 返回的数据是另一个值。有时数据是相同的,而其他时候可能会有 500-600 卡路里的增量。这是我的代码示例,展示了我如何使用 HealthKit API 检索能量数据。

NSDate* StartOfDay = [[NSCalendar currentCalendar] startOfDayForDate:[NSDate now]];
NSDateComponents* Components = [[NSDateComponents alloc] init];
Components.day = 1;
NSDate* EndOfDay = [[NSCalendar currentCalendar] dateByAddingComponents:Components toDate:StartOfDay options:NSCalendarWrapComponents];
HKSampleType* SampleType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierBasalEnergyBurned];
NSPredicate *Predicate = [HKQuery predicateForSamplesWithStartDate:StartOfDay endDate:EndOfDay options:HKQueryOptionNone];
NSSortDescriptor *SortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:YES];
HKSampleQuery* SampleQuery = [[HKSampleQuery alloc] initWithSampleType:SampleType predicate:Predicate limit:HKObjectQueryNoLimit sortDescriptors:@[SortDescriptor] resultsHandler:^(HKSampleQuery * _Nonnull query, NSArray<__kindof HKSample *> * _Nullable results, NSError * _Nullable error)
{
    if (!error && results)
    {
        int BasalCalBurned = 0;
        for (HKQuantitySample *samples in results)
        {
            BasalCalBurned += [[samples quantity] doubleValueForUnit:[HKUnit largeCalorieUnit]];
        }
    }
}

在 WatchOS 和 iOS 上调用此代码都会导致与上述相同的问题

好的,所以我将把它标记为已解决,尽管还有一些问题。在@TyR 指出我使用 int 数据类型的错误并更正之后,如果我看一下,我可以确认通过 HealthKit API 报告的数据与 Health App 报告的数据完全一致在 Data Sources 部分并选择我的 Apple Watch Data Source 并手动添加它收集的所有样本。因此,我确信我的数据是正确的,因为它与 Data Sources 中的值匹配。但是,Health App 的概述部分中报告的值不同于 Data Sources 部分中的数据以及通过HealthKit API。 Apple 一定是在进行某种校正算法,或者在跨越 day/night 边界时只抓取相关样本。我现在很满意,在修复 int 错误后,我得到了适当的数据。非常感谢!