Я пытаюсь написать небольшое приложение WatchKit, которое использует данные о сердечном ритме.Внутри willActivate я делаю следующее:
guard HKHealthStore.isHealthDataAvailable() == true else {
self.heartRateLabel!.setText("N/A")
return
}
guard let quantityType = HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate) else {
self.heartRateLabel!.setText("N/A")
return
}
let dataTypes = Set(arrayLiteral: quantityType)
self.healthStore.requestAuthorization(toShare: nil, read: dataTypes) { (success, error) -> Void in
if success {
let datePredicate = HKQuery.predicateForSamples(withStart: Date.init(), end: nil, options: .strictStartDate)
let devicePredicate = HKQuery.predicateForObjects(from: [HKDevice.local()])
let predicate = NSCompoundPredicate(andPredicateWithSubpredicates:[datePredicate, devicePredicate])
let heartRateQuery = HKAnchoredObjectQuery(type: quantityType,
predicate: predicate,
anchor: nil,
limit: HKObjectQueryNoLimit) {
(query, sampleObjects, deletedObjects, newAnchor, error) -> Void in
self.updateHeartRate(sampleObjects)
}
heartRateQuery.updateHandler = {(query, samples, deleteObjects, newAnchor, error) -> Void in
self.updateHeartRate(samples)
}
self.healthStore.execute(heartRateQuery)
} else {
self.heartRateLabel!.setText("N/A")
}
}
Мой вызов «requestAuthroization», кажется, работает, поскольку мне показывают лист «authorize» как на самих часах, так и на телефоне.Тем не менее, в обратном вызове для моего HKAnchoredObjectQuery ошибка заполняется и гласит:
▿ Optional<Error>
- some : Error Domain=com.apple.healthkit Code=5 "Authorization not determined" UserInfo={NSLocalizedDescription=Authorization not determined}
Я чувствую, что мне здесь не хватает чего-то маленького, но я просто не могу понять, на чем это основано на сообщении об ошибке.