Swift 3: запрос количества шагов из аптечки
Обновлено: я пытаюсь вызвать функцию, которая обращается к HealthKit и возвращает количество шагов, выполненных в этот день.
Я создал функцию и сейчас пытаюсь ее вызвать. Код для функции выглядит следующим образом:
//Reading data from Health app.
func todayTotalSteps (input: String, 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 = NSDate()
let calendar = Calendar(identifier: Calendar.Identifier.gregorian)
let newDate = calendar.startOfDay(for: date as Date)
let yesterday = NSCalendar.current.date(byAdding: .day, value: -1, to: Date())
let now = Date()
// Set the predicates & interval
let predicate = HKQuery.predicateForSamples(withStart: newDate as Date, end: NSDate() as Date, options: .strictStartDate)
let interval: NSDateComponents = NSDateComponents()
interval.day = 1
//Perform the Query
let query = HKStatisticsCollectionQuery(quantityType: stepsCount!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: newDate as Date, intervalComponents: interval as DateComponents)
query.initialResultsHandler = {query, results, error in
if error != nil {
// Something went wrong.
return
}
if let myResults = results{
myResults.enumerateStatistics(from: yesterday! as Date, to: now as Date){
statistics, stop in
if let quantity = statistics.sumQuantity(){
let steps = quantity.doubleValue(for: HKUnit.count())
print("Steps = \(steps)")
completion(steps)
}
}
}
}
healthStore.execute(query)
}
Я создаю действие кнопки, и внутри него я пытаюсь вызвать функцию todayTotalSteps. Я включил разрешения HealthKit в другой функции. Запуск приложения на моем iPhone 5 работает нормально до тех пор, пока я не добавлю функцию todayTotalSteps и кнопку с ее действием, затем, когда я нажимаю на добавленную кнопку, я получаю следующую ошибку, и больше ничего не происходит. В области отладки написано:
"HealthkitAccess [267: 13336] [запрос] Ошибка активации запроса: Ошибка Domain=com.apple.healthkit Code=5 " Авторизация не определена " UserInfo={NSLocalizedDescription= Авторизация не определена}"
Функция кнопки написана ниже:
@IBAction func getSteps(_ sender: Any) {
todayTotalSteps(input: "commands"){stepRetrieved in print(stepRetrieved)
}
Я использую Swift 3, Xcode 8. Я новичок в Swift, и я был бы очень признателен, если бы все это заработало! Спасибо!
2 ответа
Новый HK требует, чтобы вы запросили разрешение пользователя, прежде чем получать какие-либо данные. В своем новом обновлении они упомянули:
"Важно Приложение iOS, связанное с iOS 10.0 или после нее, должно включить в свой файл Info.plist ключи описания использования для типов данных, к которым необходимо получить доступ, иначе произойдет сбой. Для доступа и обновления данных HealthKit, в частности, оно должно включать NSHealthShareUsageDescription и NSHealthUpdateUsageDescription keys. " https://developer.apple.com/reference/healthkit
@IBAction func getSteps(_ sender: Any) {
todayTotalSteps(input: "commands") { stepRetrieved in
print(stepRetrieved)
}
}