首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用HealthKit观察HKObserverQuery数据的变化

使用HealthKit观察HKObserverQuery数据的变化
EN

Stack Overflow用户
提问于 2014-06-12 22:36:17
回答 1查看 5K关注 0票数 4

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

问题:下面基本上是我正在做的事情。这是预期的行为,还是我遗漏了什么?

代码语言:javascript
复制
    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)
    }

编辑:只有在没有错误时才应该调用已发现的完成处理程序,因此移到了错误块中。当应用程序未被授权时会出现错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-21 22:33:56

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

只有当您打算使用后台传递时,完成处理程序才是必要的,它通知HealthKit您已经收到并处理了所需的数据,以便HealthKit知道停止在后台启动应用程序。如果您没有注册您的应用程序的背景传递,那么完成处理程序本质上是一个不操作,您不需要担心它。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24194960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档