Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios HealthKit:HKObserverQuery未启动_Ios_Healthkit - Fatal编程技术网

Ios HealthKit:HKObserverQuery未启动

Ios HealthKit:HKObserverQuery未启动,ios,healthkit,Ios,Healthkit,我正在尝试做一件非常基本的事情:设置一个HKObserverQuery,这样我就可以知道各种数据点何时发生了变化(我已经确保用户已经授权应用程序使用所讨论的数据点)。无论出于何种原因,我都可以在每次启动应用程序时触发查询,但在我关闭应用程序时不会触发,进入健康应用程序,手动更新数据点。我已经做了大量的搜索,但没有能够成功地使用其他人发布的代码,他们说这些代码对他们有用 我已经进入Cocoa/Objective C开发两周了,所以我确信我遗漏了一些明显的东西,但我看不出它是什么。这里的任何指导都是

我正在尝试做一件非常基本的事情:设置一个HKObserverQuery,这样我就可以知道各种数据点何时发生了变化(我已经确保用户已经授权应用程序使用所讨论的数据点)。无论出于何种原因,我都可以在每次启动应用程序时触发查询,但在我关闭应用程序时不会触发,进入健康应用程序,手动更新数据点。我已经做了大量的搜索,但没有能够成功地使用其他人发布的代码,他们说这些代码对他们有用

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

我用于observer查询的代码如下:

   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];

谢谢

当您在iOS上挂起应用程序时,默认情况下它会停止运行,除非它已使用或已使用。应用程序未运行时无法接收通知。HealthKit有一个功能,当有特定类型的新样本时,它可以在后台唤醒你的应用程序。请参阅HKHealthStore的文档。将其与HKObserverQuery结合使用,以便在出现新数据时收到通知,即使您的应用程序尚未运行。

我根据经验(不是从文档中)发现,ObserverQuery在模拟器中运行时不会触发,但在设备上运行时会触发。而且我没有打开背景模式功能。

谢谢!我没有做的一件事是将“后台模式”作为应用程序功能启用(尽管我没有检查任何特定的后台模式,因为它们似乎都不适用);根据您链接到的文档,我目前正在使用enableBackgroundDeliveryForType。我最终这样做了,但仍然无法在有新数据点时启动查询。有没有可能我遗漏了其他内容?@tshortli,如果你没有我的,你能做一个样本,当新的健康数据可用时,在后台唤醒应用程序(之前强制杀死的应用程序)?@tshortli,我在我的应用程序上尝试了这个,但失败了(参考:)。所以,只有我在问你…:-)不要启用背景模式,除非你的应用程序确实需要它们。我提到他们只是想举例说明你的应用程序如何能够在后台运行。在我看来,支持后台传递HealthKit数据的代码是正确的。您应该向Apple提交一个bug,以获得更多诊断问题的帮助。检查控制台日志并查找任何可疑消息是我将采取的下一步。