如何在iOS中使用updateHandler和HKAnchoredObjectQuery?

时间:2015-10-26 09:58:16

标签: ios objective-c health-kit

在我的应用程序中,我想使用HKAnchoredObjectQuery获取HealthKit数据。我已经编写了返回添加和删除数据的代码,但我想将UpdateHandler设置为HKAnchoredObjectQuery,因此,当在HealthKit中添加/删除数据时,我会在应用中收到通知。

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

1 个答案:

答案 0 :(得分:3)

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

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

就我而言,我对handler参数和updateHandler属性使用相同的块。