新しいデータ入力が観察されるたびに、私のアプリケーションでHealthKitデータとデータベースを同期させようとしています。 Despite some ambiguity in the logic私は、サンプルタイプのバックグラウンド配信を可能にし、必要に応じてオブザーバーに反応させることができたと信じています。HKAnchoredObjectQueryがバックグラウンドで確実に返さない
しかし、オブザーバーのアップデートハンドラーでは、HealthKitから最新の結果を取得するためにHKAnchoredObjectQuery
を作成する必要がありますが、これらのクエリは、アプリがバックグラウンドで実行されているときに確実に返されません。 HealthKitでサンプルポイントを追加すると、アンカーされたクエリが実行されるだけですが、アプリケーションをフォアグラウンドに戻したときにのみ返されます。
私はアプリを有効にすることなくすぐに返されます。考えられる問題の1つは、すべてのオブザーバークエリが更新ハンドラを起動するため、複数のAnchoredObjectQueriesが作成されたり返されないことがあります。私はそれが無関係かもしれないので、リンクされたスレッドでさらにそれを説明しました。
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)
}
です。 –