我正在尝试制作一个简单的计步器应用程序。 但是,我似乎无法获得使用HealthKit的授权。
我有这段代码试图获得权限并在之后使用回调来处理结果。
func authorizeHealthKit(withCallback: @escaping (Bool, Error?) -> ())
{
// 3. If the store is not available (for instance, iPad) return an error and don't go on.
if !HKHealthStore.isHealthDataAvailable() {
let error = NSError(domain: "health_tracker", code: 2, userInfo: [NSLocalizedDescriptionKey: "HealthKit is not available in this Device"])
print(error)
}
else {
// 4. Request HealthKit authorization
self._healthKitStore.requestAuthorization(toShare: _healthKitTypesToWrite, read: _healthKitTypesToRead) { (success, error) -> Void in
self.isAuthorized = success
withCallback(success, error)
}
}
}
出于某种原因,似乎iOS完全跳过了这一行。在回调函数(authorizeHealthKit
调用)上设置断点时,没有任何反应,它也不会停止。使用Step Over时,它只是跳过这些行。我的模拟器(和irl iPhone)的屏幕是白色的,没有弹出对话框。
知道为什么会这样吗? 我做错了吗?
其他信息:
在同一个班级(HealthKitManager.swift)
let _healthKitStore: HKHealthStore = HKHealthStore()
var isAuthorized: Bool = false
let _healthKitTypesToWrite: Set<HKSampleType> = [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!
]
let _healthKitTypesToRead: Set<HKSampleType> = [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.stepCount)!
]
在另一个课程中,调用上述方法:
let _healthKitManager = HealthKitManager()
(...)
if !_healthKitManager.isAuthorized {
_healthKitManager.authorizeHealthKit(withCallback: onAuthenticationResult)
}
(...)
func onAuthenticationResult(success: Bool, error: Error?) {
print("Authentication result: ", success.description)
}
答案 0 :(得分:1)
也发生在我身上。 通过将我的手机升级到iOS 11.3.1解决了这个问题。 请注意它在模拟器上运行顺畅,即使iOS较低,所以我猜这是一个xcode-bug,升级到最新的xcode版本也可以解决它...