在我的应用程序中,我想使用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];
}
答案 0 :(得分:3)
实例化并执行您的HKAnchoredObjectQuery,它将运行一次,回调 handler 参数中指定的块。
实例化查询并在查询上设置 updateHandler 属性,然后执行查询。该查询第一次像以前一样运行,回调您在实例化时提供的处理程序 参数;当结果添加或删除到商店并回调到 updateHandler 时,查询会随后运行。
就我而言,我对handler参数和updateHandler属性使用相同的块。