我刚刚做了一个 HKSourceQuery 并得到了一些结果。当我做println
时在结果中,我得到了这个:<HKSource:0x156c1520 "Health" (com.apple.Health)>//description of the object
我如何使用它来使用 HKQuery.predicateForObjectsFromSource(/* source goes here */)
来创建谓词
最佳答案
这是 Obj-c 中的示例代码,
NSSortDescriptor *timeSortDesriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:NO];
HKQuantityType *quantityType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierActiveEnergyBurned];
HKSourceQuery *sourceQuery = [[HKSourceQuery alloc] initWithSampleType:quantityType samplePredicate:nil completionHandler:^(HKSourceQuery *query, NSSet *sources, NSError *error) {
//Here, sources is a set of all the HKSource objects available for "quantityTypeForIdentifier:HKQuantityTypeIdentifierActiveEnergyBurned"
HKSource *targetedSource = [[sources allObjects] firstObject];//Assume this as your targeted source
if(targetedSource)
{
NSPredicate *sourcePredicate = [HKQuery predicateForObjectsFromSource:targetedSource];
HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType predicate:sourcePredicate limit:HKObjectQueryNoLimit sortDescriptors:[NSArray arrayWithObject:timeSortDesriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
//results array contains the HKSampleSample objects, whose source is "targetedSource".
}];
[self.healthStore executeQuery:query];
}
}];
[self.healthStore executeQuery:sourceQuery];
更新1:
- 无法构造
HKSource
使用[HKSource alloc] init]
手动对象。在 HealthKit 框架中,Apple 使用init
限制对象的创建对于大多数香港类(class)。 - 我相信您一定能找到您的
HKSource
来自sources
的对象使用HKSource
设置属性如name
和bundleIdentifier
.
这是示例代码,
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.source.bundleIdentifier = 'com.XXXX.XXXXX'"];
NSArray *tempResults = [[sources allObjects] filteredArrayUsingPredicate:predicate];
HKSource *targetedSource = [tempResults firstObject];
关于ios - 了解 HKSourceQuery 或一般来源的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312686/