HKSampleQuery 未检索到最新步骤
Posted
技术标签:
【中文标题】HKSampleQuery 未检索到最新步骤【英文标题】:HKSampleQuery is not retrieving the latest steps 【发布时间】:2017-07-24 19:56:31 【问题描述】:我正在使用以下查询来使用 healthkit 检索特定日期的步骤
//Predicate
NSDate *startDate = [[NSCalendar currentCalendar] startOfDayForDate:[NSDate date]];
NSDateComponents *comp = [NSDateComponents new];
comp.day = 1;
comp.second = -1;
NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:startDate options: 0];
NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:[[NSDate date] dateByAddingDays:endDate] options: HKQueryOptionStrictEndDate];
NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierStartDate ascending:YES];
HKQuantityType *type = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKSampleQuery *stepsQuery = [[HKSampleQuery alloc] initWithSampleType: type
predicate: predicate limit:HKObjectQueryNoLimit
sortDescriptors:@[timeSortDescriptor]
resultsHandler: ^(HKSampleQuery *query, NSArray *resultsSteps, NSError *error)
....
问题:查询未返回最新步骤。有两种方法可以获得最新的步骤
-
在打开我的应用之前先打开健康应用 - 这将更新健康应用中的最新步骤,并且上述查询会返回最新步骤
20-30 分钟后打开应用,显示最新步骤
我错过了什么吗?
P.S 这是一个遗留代码库,所以没有 Swift :)
【问题讨论】:
How to force a HKQuery to load the most recent steps counts?的可能重复 【参考方案1】:在示例查询下方添加观察者查询可以解决问题,但我仍然找不到此问题的根本原因
HKObserverQuery *ibsQuery = [[HKObserverQuery alloc] initWithSampleType:steps predicate:pred updateHandler:^(HKObserverQuery * _Nonnull query, HKObserverQueryCompletionHandler _Nonnull completionHandler, NSError * _Nullable error)
//Required completion block
];
[healthStore executeQuery:ibsQuery];
【讨论】:
以上是关于HKSampleQuery 未检索到最新步骤的主要内容,如果未能解决你的问题,请参考以下文章