Herzfrequenz mit Apples Healthkit

Ich verwende derzeit Healthkit in einer App und habe keine Probleme, Informationen für die meisten Typen zu erhalten, habe jedoch Probleme mit der Herzfrequenz. Jedes Mal, wenn ich versuche, eine Probe zu lesen, erhalte ich als Ergebnis "0". Ich besitze eine Apple Watch, und meine Herzfrequenz wird in die Apple Health-App eingespeist und kann dort visuell angezeigt werden. Es handelt sich also nicht um ein Hardwareproblem. Ich muss es nur anzeigen, die Daten müssen nicht zurückgeschrieben werden. Ich werde beim ersten Start um meine Erlaubnis gebeten, den Zugriff auf die Herzfrequenz zuzulassen. Es sollte also keine Probleme mit diesem Code geben, aber ich werde es trotzdem posten.

Die meisten Beispiele, die ich mit der Herzfrequenzerkennung finden kann, sind entweder in Swift, von dem ich mich lieber fernhalte, oder veraltet die Bluetooth- / Kameramethoden.

Hier ist das, was ich verwende. Meistens wird es aus dem Code kopiert und eingefügt, der Schritte, Gehwege usw. an einer anderen Stelle in meinem Code abruft. Ich habe also wahrscheinlich etwas in diesem Block, das nicht mit der Herzfrequenz kompatibel ist Datentyp, aber ich kann ihn nicht finden. Momentan sieht es so aus, als würde die durchschnittliche Herzfrequenz für diesen Tag ermittelt und nicht die aktuellste Stichprobe, was im Moment in Ordnung ist, solange ich sehe, dass der App einige Datentypen zugeführt werden. Ich konnte keine Möglichkeit finden, die neueste Stichprobe der Herzfrequenz abzufragen. Dies lässt mich glauben, dass ich die falsche Methode verwende, kann aber keine anderen Informationen oder Stichproben finden, die funktionieren. Ich habe ungefähr 8 verschiedene Online-Beispielcodes / -Projekte ausprobiert, von denen kein anderes als "0" erzeugt werden kann (daher bitte keine Links zu Beispielcode ... Ich habe bereits alle verfügbaren ausprobiert ... google, github, etc, etc, so dass Links wahrscheinlich die Antwort "Ich habe diesen ein und denselben Fehler bereits getestet" erhalten, lol). Folgendes verwende ich gerade:

Der Block, von dem ich zu 99,9% sicher bin, gibt mir die Probleme:

    - (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];
}

Code zum Überprüfen der Berechtigungen:

- (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
                                       }

                                   }];}

Und über meiner - (nichtigen) queryHealthDataHeart habe ich die richtigen Referenzen, wie hier zu sehen:

#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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage