2016-04-05 4 views
0

J'ai essayé d'interroger HealthKit pour le nombre de pas sur mon téléphone. Voici ce que j'ai essayé:HealthKit ne pas retourner les informations mises à jour

let endDate = NSDate() 
    let startDate = NSCalendar.currentCalendar().dateByAddingUnit(.Day, value: -1, toDate: endDate, options: []) 

    let sampleType = HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount) 
    let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: .None) 

    let query = HKSampleQuery(sampleType: sampleType!, predicate: predicate, limit: 0, sortDescriptors: nil, resultsHandler: { (query, results, error) in 
     if results == nil { 
      print("There was an error running the query: \(error)") 
      return 
     } 

     dispatch_async(dispatch_get_main_queue()) { 

      //print(results) 

      dispatch_async(dispatch_get_main_queue()) { 
       let steps = results as! [HKQuantitySample] 
       print(steps.count) 
       for step in steps { 
        self.stepsLabel.text = String(step.quantity) 
       } 
      } 

     } 
    }) 

    self.healthKitStore.executeQuery(query) 

En raison de cela, stepsLabel affiche maintenant « 296 count ». Cependant, j'ai beaucoup plus de pas que cela. Je ne sais pas pourquoi il ne se met pas à jour correctement. J'ai également regardé this post et this one. Cependant, je n'ai pas bien compris les réponses. Comment dois-je m'assurer que la requête est mise à jour correctement? Merci de votre aide.

Répondre

1

Vous affichez uniquement la quantité du dernier échantillon.

Supposons que vous avez 100 échantillons. Vous mettez à jour votre étiquette 100 fois avec une valeur de quantité différente et ce que vous voyez est la valeur de quantité de la dernière mise à jour.

Pour voir la somme de tous les échantillons sélectionnés, vous devez additionner toutes les valeurs de tous les échantillons (pertinents).

+0

Notez que l'utilisation d'un HKStatisticsQuery serait beaucoup mieux pour cela. Il va calculer la somme pour vous et gérer les données qui se chevauchent provenant de plusieurs sources. Le code actuel comptera deux fois les étapes de l'utilisateur s'il possède à la fois un iPhone et un Apple Watch, par exemple. – Allan