Я написал код, чтобы получить значения сердечного ритма из набора для здоровья. Код работает нормально, но когда новые значения сердца обновляются в наборе здоровья. Я должен зайти на главный экран, а затем многозадачное приложение, чтобы получить обновленные результаты. Моя цель - получить обновленный результат в моем приложении без повторного открытия или многозадачности, пожалуйста, помогите, поскольку я новичок в разработке iOS. Мой код: -Обработчик обновления HKAnchoredQuery не работает должным образом
-(void)get_heartRates
{
//code to get the updated heart beats
HKSampleType *sampleType =
[HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
HKObserverQuery *query =
[[HKObserverQuery alloc]
initWithSampleType:sampleType
predicate:nil
updateHandler:^(HKObserverQuery *query,
HKObserverQueryCompletionHandler completionHandler,
NSError *error) {
if (error) {
NSLog(@"error occured while setting observer. %@ ",
error.localizedDescription);
abort();
}
// Take whatever steps are necessary to update your app's data and UI
// This may involve executing other queries
[self executeAnchoredQuery];
// If you have subscribed for background updates you must call the completion handler here.
// completionHandler();
}];
[self.healthStore executeQuery:query];
}
-(void)executeAnchoredQuery
{
NSDate *startDate1 = [NSDate distantPast];
NSPredicate *Predicate = [HKQuery predicateForSamplesWithStartDate:startDate1 endDate:[NSDate date] options:HKQueryOptionStrictEndDate];
HKSampleType *object = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];
sum_Of_HeartRates=0.0;
HKAnchoredObjectQuery *heartQuery = [[HKAnchoredObjectQuery alloc] initWithType:object predicate:Predicate anchor:self.lastAnchor limit:0 resultsHandler:^(HKAnchoredObjectQuery *query, NSArray<HKSample *> *sampleObjects, NSArray<HKDeletedObject *> *deletedObjects, HKQueryAnchor *newAnchor, NSError *error) {
NSLog(@"Sample counts:%ld",sampleObjects.count);
for(int i=0;i<(int)sampleObjects.count;i++)
{
HKQuantitySample *sample = (HKQuantitySample *)[sampleObjects objectAtIndex:i];
HKQuantity *quantity = sample.quantity;
double bpm_Values= [quantity doubleValueForUnit:[HKUnit unitFromString:@"count/min"]];
sum_Of_HeartRates=sum_Of_HeartRates+bpm_Values;
}
avg_heartBeats=sum_Of_HeartRates/(int)sampleObjects.count;
}];
[heartQuery setUpdateHandler:^(HKAnchoredObjectQuery *query, NSArray<HKSample *> *SampleArray, NSArray<HKDeletedObject *> *deletedObjects, HKQueryAnchor *Anchor, NSError *error) {
HKQuantitySample *sample = (HKQuantitySample *)[SampleArray objectAtIndex:0];
HKQuantity *quantity = sample.quantity;
new_Updated_Data =[quantity doubleValueForUnit:[HKUnit unitFromString:@"count/min"]];
NSLog(@"new quantity:%f",new_Updated_Data);
}];
[self.healthStore executeQuery:heartQuery];
NSLog(@"updated data %f",new_Updated_Data);
NSLog(@"%f", avg_heartBeats);
}
Как насчет observerquery? – Ujjwal
В чем проблема в HKAnchoredQuery? В HKObserverQuery я не получаю, где хранить данные, поскольку у меня есть NSArray в HKAnchoredQuery. Мне было немного легко хранить данные в массиве. –
с запросом наблюдателя вы можете получать обновления автоматически, когда есть изменение в данных о здоровье по вашему вопросу. и, соответственно, вы можете получить данные. это поможет вам? – Ujjwal