Вот пример кода в 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
для большинства классов HK.
- Я считаю, что вы можете найти свой
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];
Спасибо за ответ снова Bhanu. К сожалению, я не могу предположить, что целевой источник - тот, который я хочу. Например, я просто запускал аналогичный алгоритм и источник, который мне нужен в 4-м индексе исходного массива. На самом деле, не может быть никакой гарантии, что она находится в определенном порядке. Знаете ли вы, что вы можете построить явный HKSource, например, делать [[HKSource alloc] initWithSource: HKSourceiPhone] '<- это не работает. –
'targetSource' работает нормально. – Jack
Вы пробовали с «HKDevice»? – Jack