Enabloin jokaiselle seuraamallemme sampletyypille background deliveryn ja luon niille HKObserverQueryt, joiden updatehandlerilla kutsun funktiota, jolla haen datan HealthKitistä. En kuitenkaan ymmärrä, miksi kaikki observerit reagoivat, kun Health-sovelluksessa lisään yhden sampletyypin dataa. Luulin, että observerit seuraavat vain tiettyä datatyyppiä.
Koodi: Valitse kaikki
for sampleTypeToRead in self.dataTypesToRead as! Set<HKSampleType> {
self.healthKitStore.enableBackgroundDeliveryForType(sampleTypeToRead, frequency: .Immediate) {
(success, error) in
// Define update handler for background deliveries
let updateHandler: (HKObserverQuery, HKObserverQueryCompletionHandler, NSError?) -> Void = {
[unowned self] query, completionHandler, error in
self.synchronizeRecentData(sampleTypeToRead)
completionHandler()
}
let observerQuery = HKObserverQuery(sampleType: sampleTypeToRead, predicate: nil, updateHandler: updateHandler)
self.healthKitStore.executeQuery(observerQuery)
}
}
Koodi: Valitse kaikki
func synchronizeRecentData(sampleType: HKSampleType) {
let completionHandler: (HKAnchoredObjectQuery, [HKSample]?, Int, NSError?) -> Void = {
[unowned self] query, results, newAnchor, error in
// Update queryAnchor
self.queryAnchors[sampleType] = newAnchor
// Handle results here
}
let query = HKAnchoredObjectQuery(type: sampleType,
predicate: nil,
anchor: self.queryAnchors[sampleType]!,
limit: HKObjectQueryNoLimit,
completionHandler: completionHandler)
self.healthKitStore.executeQuery(query)
}