HealthKit:HKObserverQuery没有被解雇

我正在尝试做一个非常基本的事情:设置一个HKObserverQuery,这样我就可以知道各种数据点何时被更改(我确保用户已授权应用程序使用相关数据点。)无论出于何种原因,我可以在每次启动应用程序时触发查询,但是当我关闭应用程序,进入运行状况应用程序并手动更新数据点时,它不会触发。 我已经完成了大量的搜索工作,并且无法成功使用其他人发布的代码,他们说这些代码适用于他们。

我进入Cocoa / Objective C开发已有两周了,所以我肯定我错过了一些明显的东西,但我看不出它是什么。 这里的任何指导都会很棒,即使它只是调试方面的建议。 由于应用程序本身已关闭,并且我没有收到任何可能在控制台中注销的内容,因此我无法真正了解正在发生的事情。

我用于观察者查询的代码如下:

HKQuantityType *heartRate = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; [self.healthStore enableBackgroundDeliveryForType:heartRate frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) { if (success) { NSLog(@"observing heart rate"); NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.bodbot.com/Scripts/wearable_heartrate_changed.php"]]; }else{ NSLog(@"FAILED observing heart rate"); } }]; HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:heartRate predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) { NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://www.bodbot.com/Scripts/wearable_heartrate_changed.php"]]; }]; [self.healthStore executeQuery:query]; 

谢谢!

我根据经验(不是从文档中)发现,Observer Query在模拟器中运行时不会触发,但在设备上运行时它会触发。 我没有开启后台模式function。

在iOS上暂停应用程序时,默认情况下它会停止运行,除非它已执行后台任务断言或具有后台模式权限 。 应用无法在未运行时收到通知。 HealthKit有一个function,可以在有特定类型的新样本时在后台唤醒您的应用程序。 请参阅HKHealthStore的管理后台交付文档。 只要有新数据,即使您的应用尚未运行,也可以将其与HKObserverQuery结合使用。