Получите общее количество шагов сегодня - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь, чтобы мое приложение показывало общее количество шагов, которые я сделал сегодня.Согласно приложению Health-Kit на моем телефоне, я сделал 6 шагов, но приложение сообщает мне 0. Это полный код, который я использую:

import UIKit
import HealthKit

class ViewController: UIViewController {

    @IBOutlet weak var stepsLabel: UILabel!

    let healthStore = HKHealthStore()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        getTodaysSteps { (count) in
            DispatchQueue.main.async {
                self.stepsLabel.text = count.description
                print("DONE: \(count)")
            }
        }

    }

    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, _ in
            guard let result = result, let sum = result.sumQuantity() else {
                completion(0.0)
                return
            }
            completion(sum.doubleValue(for: HKUnit.count()))
        }

        healthStore.execute(query)
    }
}

Что-то я здесь пропустил? Код от: https://stackoverflow.com/a/44111542/10660554

1 Ответ

0 голосов
/ 30 ноября 2018

Вы пробовали это решение?

func retrieveStepCount(completion: @escaping (_ stepRetrieved: Double) -> Void) {

    //   Define the Step Quantity Type
    let stepsCount = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)

    //   Get the start of the day
    let date = Date()
    let cal = Calendar(identifier: Calendar.Identifier.gregorian)
    let newDate = cal.startOfDay(for: date)

    //  Set the Predicates & Interval
    let predicate = HKQuery.predicateForSamples(withStart: newDate, end: Date(), options: .strictStartDate)
    var interval = DateComponents()
    interval.day = 1

    //  Perform the Query
    let query = HKStatisticsCollectionQuery(quantityType: stepsCount!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: newDate as Date, intervalComponents:interval)

    query.initialResultsHandler = { query, results, error in

        if error != nil {

            //  Something went Wrong
            return
        }

        if let myResults = results{

            let now = Date()

            myResults.enumerateStatistics(from: newDate, to: now, with: { (statistics, stop) in

                if let quantity = statistics.sumQuantity() {

                    let steps = quantity.doubleValue(for: HKUnit.count())

                    print("Steps = \(steps)")
                    completion(steps)

                }
            })
        }


    }

    healthStore.execute(query)
}

Код от: https://stackoverflow.com/a/38697061/3420996

...