2015-01-23 6 views
2

Я использую HealthKit в одном из моих приложенийHealthKit не в курс

я могу использовать это неправильно, но я обнаружил, что при чтении шагов (я не пробовал с другими данными), новый шаг данные не возвращаются в моем запросе, и мне нужно открыть приложение «Здоровье», а затем открыть приложение для новой информации, которая будет возвращена запросом.

if([HKHealthStore isHealthDataAvailable]) 
{ 
    HKHealthStore *healthStore = [[HKHealthStore alloc] init]; 

    // Query for step data 
    HKQuantityType *stepType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; 
    NSSet *set = [NSSet setWithArray:@[stepType]]; 

    [healthStore requestAuthorizationToShareTypes:nil readTypes:set completion:^(BOOL success, NSError *error) { 

     if(success) 
     { 
      // Steps in 30 minute increments 
      NSDateComponents *intervalComponents = [[NSDateComponents alloc] init]; 
      [intervalComponents setMinute:30]; 

      NSCalendar *calendar = [NSCalendar currentCalendar]; 

      NSDate *now = [NSDate date]; 

      NSDate *startDate = [calendar startOfDayForDate:now]; 
      NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0]; 

      // From the start of today until the end of today 
      NSPredicate *datePredicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:(HKQueryOptionStrictStartDate | HKQueryOptionStrictEndDate)]; 

      HKStatisticsCollectionQuery *query = [[HKStatisticsCollectionQuery alloc] initWithQuantityType:stepType 
                        quantitySamplePredicate:datePredicate 
                            options:(HKStatisticsOptionCumulativeSum) 
                           anchorDate:startDate 
                         intervalComponents:intervalComponents]; 

      [query setInitialResultsHandler:^(HKStatisticsCollectionQuery *query, HKStatisticsCollection *result, NSError *error) { 

       for(HKStatistics *statistics in result.statistics) 
       { 
        NSLog(@"%@, %@", @([statistics.sumQuantity doubleValueForUnit:[HKUnit countUnit]]), statistics.startDate); 
       } 
      }]; 

      [healthStore executeQuery:query]; 
     } 
    }]; 
} 
+0

У меня также возникает такая же проблема, данные шага обновляются, только если я открою приложение «Здоровье», а затем мое приложение, он не обновляется, даже если я жду долгого времени. Вы поняли какое-либо решение? – anoop4real

ответ

2

я нашел то же самое тоже - проверить следующее SO ответ

https://stackoverflow.com/a/27239738/3847

Похоже HealthKit только импортирует информацию шаг от CoreMotion периодически, следовательно, задержки вы видите. Добавление обратного вызова для меня не срабатывало, поскольку он только возвращает обратный вызов после того, как данные шага импортируются в HealthKit

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