Опитвам се да изпълня някои действия, задействани от промени в Apple Health Kit, задействани във фонов режим на моето приложение Swift за iOS.
Ето моят AppDelegate:
var healthManager : HealthManager?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
healthManager = HealthManager.sharedInstance
return true
}
И при инициализирането на класа HealthManager разрешавам използването на Health Kit и извиквам:
var sampleType = HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)
var predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: HKQueryOptions.StrictStartDate)
var query = HKObserverQuery(sampleType: sampleType, predicate: predicate, updateHandler: stepsChangedHandler)
healthKitStore.executeQuery(query)
healthKitStore.enableBackgroundDeliveryForType(sampleType, frequency: .Immediate, withCompletion: {(succeeded, error) in
if succeeded {
println("Enabled background delivery of step changes")
} else {
if let theError = error {
print("Failed to enable background delivery of step changed. ")
println("Error = \(theError)")
}
}
})
Това работи прекрасно, когато приложението е отворено - stepsChangedHandler се извиква, когато има актуализация на комплект за здраве, но когато приложението е извън фокус, то никога не се извиква. Търсих наоколо и намерих няколко идеи, но нито една от корекциите не изглежда да работи за мен.
Благодаря!