2015-03-28 3 views
1

Я только что сделал HKSourceQuery и получил некоторые результаты. Когда я делаю println результатов, я получил это: <HKSource:0x156c1520 "Health" (com.apple.Health)>//description of the objectПонимание результатов от HKSourceQuery или источников вообще

Как использовать это, чтобы сделать предикат, используя HKQuery.predicateForObjectsFromSource(/* source goes here */)

ответ

2

Вот пример кода в 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:

  1. это не возможно построить HKSource объект вручную с помощью [HKSource alloc] init]. В среде HealthKit Apple запретила создание объектов с использованием init для большинства классов HK.
  2. Я считаю, что вы можете найти свой 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]; 
+0

Спасибо за ответ снова Bhanu. К сожалению, я не могу предположить, что целевой источник - тот, который я хочу. Например, я просто запускал аналогичный алгоритм и источник, который мне нужен в 4-м индексе исходного массива. На самом деле, не может быть никакой гарантии, что она находится в определенном порядке. Знаете ли вы, что вы можете построить явный HKSource, например, делать [[HKSource alloc] initWithSource: HKSourceiPhone] '<- это не работает. –

+0

'targetSource' работает нормально. – Jack

+0

Вы пробовали с «HKDevice»? – Jack

 Смежные вопросы

  • Нет связанных вопросов^_^