Проблемы с получением данных о частоте сердечных сокращений из HealthKit

В настоящее время у меня есть две записи сердечного ритма в начале этого года в январе, которые хранятся в моем приложении "Здоровье". В текущем приложении, которое я создаю, я предоставляю доступ для чтения и записи данных о частоте сердечных сокращений.

В моем viewDidAppear для одного из моих контроллеров просмотра я пытаюсь прочитать записи о частоте сердечных сокращений. Тем не менее, мне не удалось получить какие-либо данные.

Вот мой прочитанный код данных пульса:

+ (void)readHeartRateWithCompletion:(void (^)(NSArray *results, NSError *error))completion {

    HKQuantityType *heartRateType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];

    NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierStartDate ascending:YES];

    NSDate *lastSample = [[NSUserDefaults standardUserDefaults] objectForKey:@"lastTsUploaded"];
    if (!lastSample) {
        lastSample = [NSDate dateWithTimeIntervalSinceNow:-24 * 60 * 60];
    }

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth |  NSCalendarUnitDay;
    NSDate *now = [NSDate date];
    NSCalendar *gregorian = [NSCalendar currentCalendar];
    NSDateComponents *comps = [gregorian components:unitFlags fromDate:now];
    [comps setYear:[comps year] - 2];
    NSDate *hundredYearsAgo = [gregorian dateFromComponents:comps];

    NSPredicate *pred = [HKQuery predicateForSamplesWithStartDate:hundredYearsAgo endDate:[NSDate date] options:HKQueryOptionStrictStartDate];

    HKSampleQuery *sampleQuery = [[HKSampleQuery alloc] initWithSampleType:heartRateType predicate:pred limit:10 sortDescriptors:@[timeSortDescriptor] resultsHandler:^(HKSampleQuery *query, NSArray *results, NSError *error) {
        if (!results) {
            NSLog(@"There are no heart rate results. The error was: %@.", error);
            return;
        }
    }];

    [[dcsContext sharedContext].healthStore executeQuery:sampleQuery];
}

Почему мой запрос не возвращает никаких данных?

1 ответ

Решение

Я, наконец, понял это после нескольких часов потянув за волосы, пытаясь понять, почему ни один из моих запросов не был выполнен. Я должен был добавить следующее перед всем моим кодом:

if ([HKHealthStore isHealthDataAvailable]) {

self.healthStore = [[HKHealthStore alloc] init];

// Rest of my code below

//get the heart rates
NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDateComponents *components = [calendar components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:now];
...

Я также заменил свой [[dcs sharedContext].healthStore] другим экземпляром HealthStore, который я добавил как свойство в свой VC. Я превращу это в синглтон позже, как рекомендовано Apple, но пока это исправление работает.

Другие вопросы по тегам