我正在尝试使用一个断言用户输入值的谓词来计算HKStatisticsQuery。
我发现用户输入的值和被动记录值之间存在2个差异:
来源:
-passively记录的值为源的“A的iPhone”
- 用户输入的值具有源“健康”
'用户已输入'元数据键:
- 被动记录根本没有元数据键
- 用户输入的值将“已输入用户”元数据键设置为true
我尝试过这个谓词,试图只获取“用户输入”设置为false的数据:
HKQuery.predicateForObjectsWithMetadataKey(HKMetadataKeyWasUserEntered, allowedValues: [false])
我没有得到任何结果,有人帮我意识到如果被动记录(冗余......),元数据密钥甚至不存在。
鉴于上述差异,有没有人知道提取被动记录数据的任何其他方法?
我正在思考 NSPredicate(format: "%K != %@", HKPredicateKeyPathSource, "Health")//crash
当我执行查询时,这个谓词不起作用并且崩溃了我的程序。
有谁知道它崩溃的原因,或者是否有更好的方法来实现我的目标,即清除用户输入的数据?
感谢。
答案 0 :(得分:1)
你的崩溃可能是由于目前只有" ="和" IN"运算符支持通过源
过滤HKSamples的谓词您可以首先使用源查询来提取所有源,并使用以下代码忽略运行状况应用程序源(其标识符为 com.apple.Health ):< / p>
- (void)fetchSources
{
NSMutableArray *dataSources = [[NSMutableArray alloc] init];
HKQuantityType *stepsCount = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount];
HKSourceQuery *sourceQuery = [[HKSourceQuery alloc] initWithSampleType:stepsCount
samplePredicate:nil
completionHandler:^(HKSourceQuery *query, NSSet *sources, NSError *error)
{
for (HKSource *source in sources)
{
if (![source.bundleIdentifier isEqualToString:@"com.apple.Health"])
{
[dataSources addObject:source];
}
}
}];
[self.healthStore executeQuery:sourceQuery];
}
获得Health App以外的所有其他来源后,使用源谓词为所有其他来源提取数据:
NSPredicate *sourcesPredicate = [HKQuery predicateForObjectsFromSources:[NSSet setWithArray:self.dataSources]]
希望这会有所帮助。