2017-05-29 2 views
0

Je suis en train de créer une étiquette qui affiche les étapes d'aujourd'hui de HealthKit. J'ai même permis à HealthKit de lire/écrire des données, mais je suis bloqué sur l'obtention des données.Impossible d'obtenir les étapes d'aujourd'hui pour afficher dans l'étiquette

Quelqu'un peut-il offrir des conseils? Voici mon code, y compris l'étiquette que je veux afficher les étapes:

import Foundation 
import UIKit 
import HealthKit 


class HealthKitPage : UIViewController 
{ 
     let healthStore: HKHealthStore = HKHealthStore() 

     override func viewDidLoad() 
     { 
       var shareTypes = Set<HKSampleType>() 

       shareTypes.insert(HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!) 

       var readTypes = Set<HKObjectType>() 
       readTypes.insert(HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!) 


       healthStore.requestAuthorization(toShare: shareTypes, read: readTypes) { (success, error) -> Void in 
          if success { 
            print("success") 
          } else { 
            print("failure") 
          } 

          if let error = error { print(error) } 


       } 


     } 

     @IBOutlet weak var StepCount: UILabel! 



} 
+0

où vous êtes rendu des mesures pour étiqueter? – KKRocks

Répondre

0

Vous pouvez chercher les étapes d'aujourd'hui en utilisant HKStatisticsQuery. Vous pouvez maintenant utiliser la méthode getTodaysSteps de votre contrôleur et définir la propriété de texte de votre libellé.

Swift 3.1:

let healthStore = HKHealthStore() 

    func getTodaysSteps(completion: @escaping (Double) -> Void) { 
     let stepsQuantityType = HKQuantityType.quantityType(forIdentifier: .stepCount)! 

     let now = Date() 
     let startOfDay = Calendar.current.startOfDay(for: now) 
     let predicate = HKQuery.predicateForSamples(withStart: startOfDay, end: now, options: .strictStartDate) 

     let query = HKStatisticsQuery(quantityType: stepsQuantityType, quantitySamplePredicate: predicate, options: .cumulativeSum) { (_, result, error) in 
      var resultCount = 0.0 

      guard let result = result else { 
       log.error("Failed to fetch steps = \(error?.localizedDescription ?? "N/A")") 
       completion(resultCount) 
       return 
      } 

      if let sum = result.sumQuantity() { 
       resultCount = sum.doubleValue(for: HKUnit.count()) 
      } 

      DispatchQueue.main.async { 
       completion(resultCount) 
      } 
     } 

     healthStore.execute(query) 
    } 

Vous pouvez appeler cette méthode comme ceci:

override func viewDidLoad() { 
    super.viewDidLoad() 

    getTodaysStepCount { [weak self] steps in 
     self?.StepCount.text = "\(steps)" 
    } 
} 
+0

Merci pour cela! J'ai ce travail, mais je ne peux pas travailler sur la façon d'attribuer getTodaysSteps à mon étiquette – Kayleigh

+0

exemple Ajouté sur la façon d'appeler la méthode 'getTodaysStepCount'. Notez que vous ne devez pas nommer vos variables avec une lettre majuscule. 'StepCount' devrait être' stepCount'. –

+0

Merci beaucoup! Je vais revoir mon code et lire. Merci d'être si utile! – Kayleigh