Ich versuche, meine App zu synchronisieren, wenn neue Dateneingaben beobachtet werden. Despite some ambiguity in the logic Ich glaube, es ist mir gelungen, die Hintergrundlieferung für die Probentypen zu ermöglichen und die Beobachter bei Bedarf reagieren zu lassen.HKAnchoredObjectQuery wird im Hintergrund nicht zuverlässig zurückgegeben
Allerdings muss ich im Updatehandler des Beobachters ein HKAnchoredObjectQuery
zum Abrufen der neuesten Ergebnisse von HealthKit erstellen, aber diese Abfragen werden nicht zuverlässig zurückgegeben, wenn meine App im Hintergrund ausgeführt wird. Wenn ich in HealthKit Beispielpunkte hinzufüge, werden die verankerten Abfragen nur ausgeführt, aber sie werden nur zurückgegeben, wenn ich die Anwendung wieder in den Vordergrund bringe.
Andere Male kehren sie sofort zurück, ohne dass ich die App aktivieren muss. Ein mögliches Problem besteht darin, dass alle meine Observer-Abfragen ihre Updatehandler auslösen, wodurch mehrere AnchoredObjectQueries erstellt werden, die zurückgegeben werden können oder nicht. Ich habe das im verknüpften Thread weiter erklärt, weil es vielleicht nichts damit zu tun hat.
Hier ist ein Beispiel für die Funktion von HKObserverQuery des updatehandler Ich rufe:
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)
}
Wenn Sie möchten, dass Ihre App nicht ausgesetzt werden, sollten Sie einen HKWorkoutSession starten. –