Пульс с аптечкой Apple

В настоящее время я использую Healthkit в приложении, и у меня нет проблем с получением информации для большинства типов, но у меня проблемы с сердечным ритмом. Каждый раз, когда я пытаюсь прочитать образец, в результате я получаю «0». У меня есть Apple Watch, и мой пульс подается в приложение Apple Health, и я могу видеть его там, так что это не проблема с оборудованием. Мне нужно только отобразить его, не нужно записывать данные обратно. Он запрашивает мое разрешение на первый запуск, чтобы разрешить доступ к частоте сердечных сокращений, поэтому не должно быть никаких проблем с этим кодом, но я все равно опубликую его.

Большинство примеров, которые я могу найти с помощью определения сердечного ритма, относятся либо к Swift, от которого я предпочитаю держаться подальше, либо к устаревшим методам Bluetooth / камеры.

Вот то, что я использую, это в основном копирование и вставка из кода, который извлекает шаги, пройденное расстояние и т. Д. В другом месте моего кода ... так что, вероятно, в этом блоке есть что-то, что не совместимо с данными о частоте сердечных сокращений типа, но я не могу его найти. Сейчас похоже, что он будет получать среднюю частоту сердечных сокращений за день, а не последний образец, что пока хорошо, если я вижу, что НЕКОТОРЫЕ типы данных передаются в приложение. Я не смог найти способ опроса последней выборки частоты сердечных сокращений, что заставило меня поверить, что я использую неправильный метод полностью, но не могу найти какую-либо другую информацию или образцы, которые работают. Я пробовал около 8 различных примеров кода / проектов в Интернете, ни один из которых я не смог бы создать в результате чего-либо, кроме "0" (поэтому, пожалуйста, никаких ссылок на пример кода ... Я уже пробовал все доступные ... google, github и т. д., поэтому любые ссылки, вероятно, получат ответ "Я уже проверял ту же ошибку", смеется). Вот что я сейчас использую:

Блок, в котором я уверен на 99,9%, дает мне проблемы:

    - (void)queryHealthDataHeart{
    HKQuantityType *typeHeart =[HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
    NSDate *now = [NSDate date];
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
    NSDateComponents *components = [calendar components:NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay
                                               fromDate:now];
    NSDate *beginOfDay = [calendar dateFromComponents:components];
    NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:beginOfDay endDate:now options:HKQueryOptionStrictStartDate];

    HKStatisticsQuery *squery = [[HKStatisticsQuery alloc] initWithQuantityType:typeHeart quantitySamplePredicate:predicate options:HKStatisticsOptionNone completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            HKQuantity *quantity = result.averageQuantity;
            double beats = [quantity doubleValueForUnit:[HKUnit heartBeatsPerMinuteUnit]];
            _lblHeart.text = [NSString stringWithFormat:@"%.f",beats];
        }
        );
    }];
    [self.healthStore executeQuery:squery];
}

Код для проверки разрешений:

- (void)readHealthKitData{
HKHealthStore *healthStore = [[HKHealthStore alloc] init];
NSSet *shareObjectTypes = [NSSet setWithObjects:
                           nil];
NSSet *readObjectTypes  = [NSSet setWithObjects:
                           [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierDistanceWalkingRunning],
                           [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate],
                           [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierFlightsClimbed],
                           [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount],
                           nil];
// Request access
[healthStore requestAuthorizationToShareTypes:shareObjectTypes
                                    readTypes:readObjectTypes
                                   completion:^(BOOL success, NSError *error) {
                                       if(success == YES)
                                       {
                                           [self queryHealthData];
                                           [self queryHealthDataDistance];
                                           [self queryHealthDataFlights];
                                           [self queryHealthDataHeart];
                                       }
                                       else
                                       {
                                           // Determine if it was an error or if the
                                           // user just canceld the authorization request
                                       }

                                   }];}

И выше моего - (void) queryHealthDataHeart у меня есть правильные ссылки, как показано здесь:

#import "AN_Pedometer.h"
#import <HealthKit/HealthKit.h>

@interface AN_Pedometer (){
UILabel *lbCMData;
NSDateFormatter *formatter;}
@property (nonatomic, strong) CMPedometer *pedometer;
@property (nonatomic, strong) HKHealthStore *healthStore;
@end
@interface HKUnit (HKManager)
+ (HKUnit *)heartBeatsPerMinuteUnit;
@end

@implementation HKUnit (HKManager)

+ (HKUnit *)heartBeatsPerMinuteUnit {
return [[HKUnit countUnit] unitDividedByUnit:[HKUnit minuteUnit]];
}

@end

Ответы на вопрос(2)

Ваш ответ на вопрос