当我设置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)
}
Run Code Online (Sandbox Code Playgroud)
编辑:发现完成处理程序只应在没有错误时调用,因此移入!错误块.未授权应用时出现错误.
是的,这是预期的行为.更新处理程序将始终在首次执行时调用,以便您可以使用它来获取初始数据(从示例查询,锚定对象查询等)并填充UI.
只有在您打算使用后台交付时才需要完成处理程序,它会通知HealthKit您已收到并处理了所需的数据,以便HealthKit知道停止在后台启动您的应用程序.如果您尚未注册应用程序以进行后台交付,那么完成处理程序本质上是一个无操作程序,您无需担心它.
| 归档时间: |
|
| 查看次数: |
4142 次 |
| 最近记录: |