ios - HKAnchoredObjectQuery 无法在后台可靠地返回

标签 ios swift healthkit

每当观察到新数据输入时,我正在尝试让我的应用程序将 HealthKit 数据与我们的数据库同步。 Despite some ambiguity in the logic我相信我已经设法为样本类型启用后台交付,并让观察员在需要时使用react。

但是,在观察者的更新处理程序中,我需要创建一个 HKAnchoredObjectQuery 来从 HealthKit 获取最新结果,但是当我的应用程序在后台运行时,这些查询不会可靠地返回。通常,当我在 HealthKit 中添加样本点时,锚定的查询就会被执行,但只有当我将应用程序带回前台时它们才会返回。

其他时候他们会立即返回,而无需我激活应用程序。一个可能的问题是我所有的观察者查询都触发了它们的更新处理程序,从而创建了多个可能返回也可能不返回的 AnchoredObjectQueries。我已经在链接线程中进一步解释了这一点,因为它可能不相关。

这是我从 HKObserverQuery 的更新处理程序调用的函数示例:

func synchronizeRecentData(sampleType: HKSampleType, observerQuery: HKObserverQuery) {

    let completionHandler: (HKAnchoredObjectQuery, [HKSample]?, Int, NSError?) -> Void = {
        [unowned self] query, results, newAnchor, error in

        if error != nil {
            abort()
        }

        // Update queryAnchor
        self.queryAnchors[sampleType] = newAnchor

        guard let receivedNewSamples = results as? [HKQuantitySample] else {
            abort()
        }

        // Handle received samples here
    }

    let query = HKAnchoredObjectQuery(type: sampleType,
                                      predicate: nil,
                                      anchor: self.queryAnchors[sampleType]!,
                                      limit: HKObjectQueryNoLimit,
                                      completionHandler: completionHandler)
    healthKitStore.executeQuery(query)
}

最佳答案

根据 HealthKit 文档:

Unlike the observer query, these updates include a list of items that have been added or removed; however, anchored object queries cannot be registered for background delivery. For more information, see HKAnchoredObjectQuery.

唯一可以注册后台传递的查询是 HKObserverQuery

关于ios - HKAnchoredObjectQuery 无法在后台可靠地返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37990191/

相关文章:

ios - Swift 5 - 编辑文本字段隐藏键盘

ios - 如何向 iPhone 发送低心率通知?

ios - 如何与 UISearchController 演示/解雇动画一起制作动画?

iPhone (iOS) 应用程序使用本地 sqlite 并希望在多个设备之间同步

ios - 无法在 Linux 环境中运行/构建 IOS。 with/tmp 文件夹在另一个文件系统上

iphone - 在 iPhone 应用程序的 map 上通过适当的图标显示酒店(和附近的地方)

ios - 如果条件为 True,则执行 segue

ios - 如何在 swift (SpriteKit) 中绘制作为单个节点的圆点

ios - 如何从 HealthKit 获取元数据?

ios - HKAnchoredObjectQuery 可以在 HealthKit 中查询已删除的 HKSampleType 吗?