OStack程序员社区-中国程序员成长平台

标题: ios - 如何在 iOS 中使用 updateHandler 和 HKAnchoredObjectQuery? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:36
标题: ios - 如何在 iOS 中使用 updateHandler 和 HKAnchoredObjectQuery?

在我的应用程序中,我想使用 HKAnchoredObjectQuery 获取 HealthKit 数据。我编写了返回添加和删除数据的代码,但我想用 HKAnchoredObjectQuery 设置 UpdateHandler 所以,当在 HealthKit 中添加/删除数据时,我会在 app.xml 中收到通知。

-(void)AnchoredObjectQueryTest
{
    HKSampleType *sampleType1 =
    [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierBodyMass];

    HKAnchoredObjectQuery *query =
    [[HKAnchoredObjectQuery alloc]
     initWithType:sampleType1
     predicate:nil
     anchor: HKAnchoredObjectQueryNoAnchor
     limit:HKObjectQueryNoLimit
     resultsHandler:^(HKAnchoredObjectQuery * query,
                      NSArray<HKSample *> * sampleObjects,
                      NSArray<HKDeletedObject *> * deletedObjects,
                      HKQueryAnchor *newAnchor,
                      NSError * error) {

         if (error) {

             // Perform proper error handling here...
             NSLog(@"*** An error occured while performing the anchored object query. %@ ***",
                   error.localizedDescription);

             abort();
         }

       anchor = newAnchor;


         for (HKQuantitySample *sample in sampleObjects) {
             NSLog(@"Add : %@", sample);
         }

         for (HKDeletedObject *sample in deletedObjects) {
              NSLog(@"Delete : %@", sample);
         }


     }];


     [healthStore executeQuery:query];
}



Best Answer-推荐答案


实例化并执行您的 HKAnchoredObjectQuery,它将运行一次,回调到 handler 参数中指定的 block 。

实例化查询并在查询上设置updateHandler 属性,然后执行查询。查询像以前一样第一次运行,回调您在实例化时提供的处理程序 参数;当结果被添加或删除到存储并回调到您的 updateHandler 时,查询随后运行。

在我的例子中,我对 handler 参数和 updateHandler 属性使用相同的 block 。

关于ios - 如何在 iOS 中使用 updateHandler 和 HKAnchoredObjectQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33342864/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4