gpt4 book ai didi

ios - HKObserverQuery 仅在重新打开应用程序时运行

转载 作者:行者123 更新时间:2023-11-30 12:17:11 29 4
gpt4 key购买 nike

所以我一直按照这个答案中的说明进行操作... Healthkit background delivery when app is not running

代码运行良好,并且在应用程序打开时工作,并表示后台交付成功,但是当我通过走动并将设备上的时钟向前一小时更改来测试应用程序时,我没有收到任何日志来让我知道它已经运行了。但是,如果我再次打开应用程序,观察者查询就会运行。

private func checkAuthorization(){
let healthDataToRead = Set(arrayLiteral: self.distanceQuantityType!)


healthKitStore.requestAuthorization(toShare: nil, read: healthDataToRead) { (success, error) in
if error != nil {
print(error?.localizedDescription)
print("There was an error requesting Authorization to use Health App")
}
if success {
print("success")

}
}

}
public func enableBackgroundDelivery() {

self.checkAuthorization()
self.healthKitStore.enableBackgroundDelivery(for: self.distanceQuantityType!, frequency: .hourly) { (success, error) in
if success{
print("Background delivery of steps. Success = \(success)")

}

if let error = error {
print("Background delivery of steps failed = \(error.localizedDescription)")
}
}



}

func observeDistance(_ handler:@escaping (_ distance: Double) -> Void) {

let updateHandler: (HKObserverQuery?, HKObserverQueryCompletionHandler?, Error?) -> Void = { query, completion, error in
if !(error != nil) {
print("got an update")
completion!()
} else {
print("observer query returned error: \(error)")
}
}

let query = HKObserverQuery(sampleType: self.distanceQuantityType!, predicate: nil, updateHandler: updateHandler)
self.healthKitStore.execute(query)
}

查询在appDelegate方法didFinishLaunching中初始化

最佳答案

这个特定的 HealthKitQuery 是异步的。您应该等待它完成处理。

但是,这种情况在 didFinishLaunching 中是不可能的。应用程序刚刚结束执行,没有足够的时间来处理查询。

我认真建议重新考虑代码操作背后的逻辑。解决这个问题的一个好方法是将请求放在其他地方,最好是在完成所需的操作之后。

关于ios - HKObserverQuery 仅在重新打开应用程序时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45269527/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com