2016-03-25 5 views
-2

Я написал этот код, чтобы получить частоту сердечных сокращений Я использую NSArray и получаю среднее значение сердечного ритма. Теперь вопрос в том, что Apple Watch обновляет данные в Health Kit, и я хочу, чтобы обновленные средние биения сердца обновлялись каждые 1 минуту. Я застрял в этом пункте, пожалуйста, помогите?Получение обновленных данных о сердечном ритме из набора Health Kit

-(double)get_heartRates 
{ 

//code to get the updated heart beats 
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); 


return avg_heartBeats; 


//todo:- to get background update fast and easy 

}

+0

Любой человек может сказать мне, почему я дал -2 в этом вопросе? –

+0

Вы запускаете эту консоль на iPhone или на часах? –

+0

iphone, получение данных из набора для здоровья –

ответ

0

Используйте HKObserverQuery, чтобы получить продолжительный запрос, который обновляется в фоновом режиме:

https://developer.apple.com/library/ios/documentation/HealthKit/Reference/HKObserverQuery_Class/index.html

Пока не HKWorkoutSession работает, ваши часы измеряет частоту сердечных сокращений каждый 10 минут, поэтому вы не получите больше значений. Когда на ваших часах работает HKWorkoutSession, вы чаще получаете значения.

Если вы хотите погрузиться в HKWorkoutSession, Allan имеет подробное руководство: https://developer.apple.com/videos/play/wwdc2015/203/

+0

В чем проблема в HKAnchoredQuery? Как я использовал обработчик обновления? Могу ли я использовать то же самое без WorkoutSession? –

+0

Нет проблем с 'HKAnchoredQuery'. Вы можете использовать его без 'HKWorkoutSession' (' HKWorkoutSession' доступен только на часах). –

+0

Привет, Герд Спасибо, теперь я столкнулся с этой проблемой. Я получаю обновленные данные, но мне нужно многозадачность, и я хочу получить правильные живые данные без многозадачности и касаться Health Kit.http: //stackoverflow.com/questions/36277821/hkanchoredquery-update-handler-not-working-properly/ 36279850? Noredirect = 1 # comment60186455_36279850, пожалуйста, помогите в этом? –