HealthKit Query übergibt keine Daten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Aufgrund der Corona-Krise: Die Veröffentlichung von Stellenangeboten und -gesuchen ist bis 31.12.2020 kostenfrei. Das beinhaltet auch Angebote und Gesuche von und für Freischaffende und Selbstständige.

  • HealthKit Query übergibt keine Daten

    Hey,
    Ich stelle mich mal kurz vor. Mein Name ist Martin, ich studiere im zweiten semester Informatik.
    Ich bin relativ neu in der iOS App Entwicklung. Ich habe schon einige Projekte für Android Projekte umgesetzt und habe auch ein wenig Programmier Erfahrung.
    Ich bin vor ein paar Monaten auf ein iPhone + Apple Watch umgestiegen und will mir jetzt gerne eine kleine App schreiben, die meine Energieverbrauch über den Tag tracked.
    Hierfür will ich verschiede Daten vom HealthStore abfragen. Angefangen mit .activeEnergyBurned
    Das versuche ich mit folgender Funktion zu bewerkstelligen:

    Quellcode

    1. private func startHKQuery(quantityTypeIdentifier: HKQuantityTypeIdentifier) {
    2. //doesn't return any data as sample
    3. //DEBUG
    4. // 1
    5. let devicePredicate = HKQuery.predicateForObjects(from: [HKDevice.local()])
    6. // 2
    7. let updateHandler: (HKAnchoredObjectQuery, [HKSample]?, [HKDeletedObject]?, HKQueryAnchor?, Error?) -> Void = {
    8. query, samples, deletedObjects, queryAnchor, error in
    9. // 3
    10. guard let samples = samples as? [HKQuantitySample] else {
    11. return
    12. }
    13. self.process(samples, type: quantityTypeIdentifier)
    14. }
    15. // 4
    16. let query = HKAnchoredObjectQuery(type: HKObjectType.quantityType(forIdentifier: quantityTypeIdentifier)!, predicate: devicePredicate, anchor: nil, limit: HKObjectQueryNoLimit, resultsHandler: updateHandler)
    17. query.updateHandler = updateHandler
    18. // 5
    19. healthStore.execute(query)
    20. print("query sended")
    21. }
    Alles anzeigen


    Die Samples werden dann von der Funktion process verarbeitet:

    Quellcode

    1. private func process(_ samples: [HKQuantitySample], type: HKQuantityTypeIdentifier) {
    2. print("process func run")
    3. var lastActiveEnergy = 0.0
    4. print(String(samples.count))
    5. for sample in samples {
    6. print(sample)
    7. if type == .heartRate {
    8. lastActiveEnergy = sample.quantity.doubleValue(for: heartRateQuantity)
    9. }
    10. print("Value written")
    11. self.value = 10 //Int(lastActiveEnergy)
    12. }
    13. }
    Alles anzeigen
    Ich habe den Code größtenteils nicht selber geschrieben, ich versuche noch zu lernen und zu verstehen.
    Gerade habe ich das problem, dass die Samples von der query Func leer sind. Die Ausgabe

    Quellcode

    1. print(String(samples.count))
    gibt null aus.
    Könntet ihr mir sagen, wo mein Fehler liegt?
    Mit freundlichen Grüßen und danke im Voraus,
    Martin.