gpt4 book ai didi

ios8 - 使用 HKObserverQuery 观察 HealthKit 数据的变化

转载 作者:行者123 更新时间:2023-12-01 10:47:34 26 4
gpt4 key购买 nike

当我设置 HKObserverQuery 时,更新处理程序总是立即被调用(这是我没想到的)。正如您所期望的那样,当我通过 Health.app 添加数据点时,它也会被调用。我倾向于认为我对完成处理程序没有做正确的事情,但是关于这里应该发生的事情的文档相当稀少。

问题:下面基本上是我在做什么。这是预期的行为,还是我错过了什么?

func listenForUpdates() {
let bodyMassType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)
let updateHandler: (HKObserverQuery!, HKObserverQueryCompletionHandler!, NSError!) -> Void = { query, completion, error in
if !error {
println("got an update")
// ... perform a sample query to get the actual data
completion() // is this the right thing to do?
} else {
println("observer query returned error: \(error)")
}
}
let query = HKObserverQuery(sampleType: bodyMassType, predicate: nil, updateHandler: updateHandler)
healthStore?.executeQuery(query)
}

编辑 : 发现完成处理程序应该只在没有错误时调用,所以移到 !error 块中。当应用程序未经授权时会出现错误。

最佳答案

是的,这是预期的行为。更新处理程序将始终在第一次执行时被调用,以便您可以使用它来获取您的初始数据(来自您的示例查询、 anchor 定对象查询等)并填充您的 UI。

只有在您打算使用后台交付时才需要完成处理程序,它会通知 HealthKit 您已收到并处理了您需要的数据,以便 HealthKit 知道停止在后台启动您的应用程序。如果您还没有为后台交付注册您的应用程序,那么完成处理程序本质上是一个空操作,您无需担心。

关于ios8 - 使用 HKObserverQuery 观察 HealthKit 数据的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24194960/

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