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