Calories not being recorded for HealthKit Watch app Calories not being recorded for HealthKit Watch app swift swift

Calories not being recorded for HealthKit Watch app


You can do it another way without using predicate.

weak var delegate: WorkoutSessionManagerDelegate?let healthStore: HKHealthStorevar workoutSession: HKWorkoutSession var workoutStartDate: NSDate?var workoutEndDate: NSDate?var queries: [HKQuery] = []var activeEnergySamples: [HKQuantitySample] = []var distanceSamples: [HKQuantitySample] = []var heartRateSamples: [HKQuantitySample] = []let energyUnit = HKUnit.calorieUnit()let distanceUnit = HKUnit.meterUnit()let countPerMinuteUnit = HKUnit(fromString: "count/min")var anchor = HKQueryAnchor(fromValue: Int(HKAnchoredObjectQueryNoAnchor))let activeEnergyType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned)!let heartRateType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)! // 1/3var distanceType: HKQuantityType {    if self.workoutSession.activityType == .Cycling {        return HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceCycling)!    } else {        return HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierDistanceWalkingRunning)!    }}var currentActiveEnergyQuantity: HKQuantityvar currentDistanceQuantity: HKQuantityvar currentHeartRateSample: HKQuantitySample? init(context: WorkoutSessionContext) {    self.healthStore = context.healthStore    self.workoutSession = HKWorkoutSession(activityType: context.activityType, locationType: context.locationType)    self.currentActiveEnergyQuantity = HKQuantity(unit: self.energyUnit, doubleValue: 0.0)    self.currentDistanceQuantity = HKQuantity(unit: self.distanceUnit, doubleValue: 0.0)    super.init()     self.workoutSession.delegate = self}// MARK: Active Energy Burned Streamingfunc createActiveEnergyStreamingQuery(workoutStartDate: NSDate) -> HKQuery? {    print("Active energy query started")    // ** Creating a match samples predicate to sum the data is no longer the convention **    // Sum the new quantities with the current active energy quantity.    guard let quantityType = HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierActiveEnergyBurned) else {return nil}    // Instantiate a HKAnchoredObjectQuery object with a results handler that calls our sumEnergyBurnedSamples function    let activeEnergyQuery = HKAnchoredObjectQuery(type: quantityType, predicate: nil, anchor: anchor, limit: Int(HKObjectQueryNoLimit)) { (query, samples, deletedObjects, newAnchor, error) -> Void in        guard let newAnchor = newAnchor else {return}        self.anchor = newAnchor        self.addActiveEnergySamples(samples)    }    // Results handler that calls our addActiveEnergySamples function    activeEnergyQuery.updateHandler = {(query, samples, deletedObjects, newAnchor, error) -> Void in            self.anchor = newAnchor!            self.addActiveEnergySamples(samples)    }    return activeEnergyQuery}func addActiveEnergySamples(samples: [HKSample]?) {    print("Updating calorie samples")    guard let activeEnergyBurnedSamples = samples as? [HKQuantitySample] else { return }    // addActiveEnergySamples method dispatches back to the main queue    dispatch_async(dispatch_get_main_queue()) {         // Adds the new active energy sample to the running total      self.currentActiveEnergyQuantity = self.currentActiveEnergyQuantity.addQuantitiesFromSamples(activeEnergyBurnedSamples, unit: self.energyUnit)        // Adds that sample to an array of samples accumulated over the workout        self.activeEnergySamples += activeEnergyBurnedSamples        // Whenever new samples become available, call the corresponding delegate method. This updates the UI with new samples.        self.delegate?.workoutSessionManager(self, didUpdateActiveEnergyQuantity: self.currentActiveEnergyQuantity)        // Print checks        guard let sample = activeEnergyBurnedSamples.first else{return}        let value = sample.quantity.doubleValueForUnit(self.energyUnit)        print(value)    }}

enter image description here