iOS Healthkit阅读训练

时间:2015-09-16 12:06:57

标签: ios objective-c health-kit

任何人都知道如何从HealthKit获取锻炼数据。我在本教程中看到http://www.raywenderlich.com/89733/healthkit-tutorial-with-swift-workouts它很快。我已经尝试了基于该教程的目标c,但结果为零。有保存锻炼的问题,但我想阅读锻炼数据和显示。

HKWorkoutType *workouttype = [HKWorkoutType workoutType];
HKWorkout  *workout;
NSDate *startDate, *endDate;

NSDate *date1 = [NSDate date];
int daysTominus = -2;
startDate = [date1 dateByAddingTimeInterval:60*60*24*daysTominus];
int daysToAdd = 1;
NSDate *newDate1 = [date1 dateByAddingTimeInterval:60*60*24*daysToAdd];
endDate = newDate1;

workout = [HKWorkout workoutWithActivityType:HKWorkoutActivityTypeSwimming startDate:startDate endDate:endDate];

NSPredicate *predicate = [HKQuery predicateForObjectsFromWorkout:workout];

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:HKSampleSortIdentifierStartDate ascending:YES];

HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:workouttype
                                                             predicate:predicate
                                                                 limit:HKObjectQueryNoLimit
                                                       sortDescriptors:@[sortDescriptor]
                                                        resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error)
                              {
                                  if(!error && results){
                                 for(HKQuantitySample *samples in results)
                                  {
                                      // your code here
                                      NSLog(@"%@",samples);
                                  }
                                  }
                              }];

// Execute the query
[healthStore executeQuery:sampleQuery];

1 个答案:

答案 0 :(得分:1)

问题似乎是你的谓词。

此代码适用于我,我使用跑步,因为我没有游泳数据但你可以改回游泳:

    -(void)retrieveWorkouts{
    // 1. Predicate to read only running workouts
    NSPredicate *predicate = [HKQuery predicateForWorkoutsWithWorkoutActivityType:HKWorkoutActivityTypeWalking];

    // 2. Order the workouts by date
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]initWithKey:HKSampleSortIdentifierStartDate ascending:false];

    // 3. Create the query 
    HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:[HKWorkoutType workoutType]
                                                                 predicate:predicate
                                                                     limit:HKObjectQueryNoLimit
                                                           sortDescriptors:@[sortDescriptor]
                                                            resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error)
                                  {

                                      if(!error && results){
                                          NSLog(@"Retrieved the following workouts");
                                          for(HKQuantitySample *samples in results)
                                          {
                                              // your code here
                                              HKWorkout *workout = (HKWorkout *)samples;
                                              NSLog(@"%f",workout);
                                          }
                                      }else{
                                          NSLog(@"Error retrieving workouts %@",error);
                                      }
                                  }];

    // Execute the query
    [healthStore executeQuery:sampleQuery];
}