每当观察到新数据输入时,我正在尝试让我的应用程序将 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/