如何使用HKObserverquery读取iOS Healthkit血压(收缩压、舒张压)?

如何使用HKObserverquery读取iOS Healthkit血压(收缩压、舒张压)?,ios,objective-c,healthkit,Ios,Objective C,Healthkit,通过使用以下代码,当healthkit中有数据时,我可以使用observer查询自动读取心率数据 HKSampleType*readGlucoseType readGlucoseType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate]; query = [[HKObserverQuery alloc]initWithSampleType:readGlucoseTy

通过使用以下代码,当healthkit中有数据时,我可以使用observer查询自动读取心率数据

HKSampleType*readGlucoseType

        readGlucoseType = [HKSampleType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];


    query = [[HKObserverQuery alloc]initWithSampleType:readGlucoseType
                                             predicate:nil
                                         updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error)
             {

                 if (!error)
                 {
                     [self handleHKQueryResponse:query completionHandler:completionHandler errorCode:error];
                 }
                 else
                 {
                     NSLog(@"Observerquery Error");

                     if (completionHandler)
                     {
                         completionHandler();
                     }
                 }
             }];

    [self.healthStore executeQuery:query];

如何使用observer查询从health kit读取血压数据?

以下是从health kit获取血压数据的示例代码

    HKCorrelationType *correlationType = [HKCorrelationType correlationTypeForIdentifier:HKCorrelationTypeIdentifierBloodPressure];

[self.healthStore enableBackgroundDeliveryForType:sampleType frequency:HKUpdateFrequencyImmediate withCompletion:^(BOOL success, NSError *error) {}];

HKObserverQuery *query = [[HKObserverQuery alloc] initWithSampleType:sampleType predicate:nil updateHandler:^(HKObserverQuery *query, HKObserverQueryCompletionHandler completionHandler, NSError *error) {
        if (!error)
             {
                 [self handleHKQueryResponse:query completionHandler:completionHandler errorCode:error];
             }
             else
             {
                 NSLog(@"Observerquery Error");

                 if (completionHandler)
                 {
                     completionHandler();
                 }
             }
    [self.healthStore executeQuery:query];

很可能你来这里是想找到一个解决方案,如何在swift中读取healthkit中的血压。话虽如此,以下是我在swift中的解决方案

func readSampleByBloodPressure()
{

    let past = NSDate.distantPast() as! NSDate
    let now   = NSDate()
    let sortDescriptor = NSSortDescriptor(key:HKSampleSortIdentifierStartDate, ascending: true)
    let type = HKQuantityType.correlationTypeForIdentifier(HKCorrelationTypeIdentifierBloodPressure)
    let sampleQuery = HKSampleQuery(sampleType: type, predicate: nil, limit: 0, sortDescriptors: [sortDescriptor])
        { (sampleQuery, results, error ) -> Void in

            let dataLst = results as? [HKCorrelation];

            for var index=0;index<dataLst!.count;++index
            {

                let data1 = (dataLst![index].objectsForType(HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureSystolic))).first as? HKQuantitySample
                let data2 = dataLst![index].objectsForType(HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBloodPressureDiastolic)).first as? HKQuantitySample

                if let value1 = data1!.quantity?.doubleValueForUnit(HKUnit.millimeterOfMercuryUnit()) , value2 = data2!.quantity?.doubleValueForUnit(HKUnit.millimeterOfMercuryUnit()) {
                    println(value1)
                    println(value2)
                }
            }

    }
    self.healthKitStore.executeQuery(sampleQuery)       

}
func readSampleByBloodPressure()
{
将pass=NSDate.distantpass()设为!NSDate
现在让我们=NSDate()
设sortDescriptor=NSSortDescriptor(键:HKSampleSortIdentifierStartDate,升序:true)
let type=HKQuantityType.correlationTypeForIdentifier(HKCorrelationTypeIdentifierBloodPressure)
让sampleQuery=HKSampleQuery(sampleType:type,谓词:nil,限制:0,sortDescriptor:[sortDescriptor])
{(sampleQuery,结果,错误)->中的Void
设dataLst=结果为?[HKCorrelation];

对于var index=0;index更新了Xcode 9.2的答案:

func readSampleByBloodPressure()
    {
         guard let type = HKQuantityType.correlationType(forIdentifier: HKCorrelationTypeIdentifier.bloodPressure),
        let systolicType = HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bloodPressureSystolic),
        let diastolicType = HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.bloodPressureDiastolic) else {

            return
    }

    let sampleQuery = HKSampleQuery(sampleType: type, predicate: nil, limit: 0, sortDescriptors: nil) { (sampleQuery, results, error) in
        if let dataList = results as? [HKCorrelation] {
            for data in dataList
            {
                if let data1 = data.objects(for: systolicType).first as? HKQuantitySample,
                    let data2 = data.objects(for: diastolicType).first as? HKQuantitySample {

                    let value1 = data1.quantity.doubleValue(for: HKUnit.millimeterOfMercury())
                    let value2 = data2.quantity.doubleValue(for: HKUnit.millimeterOfMercury())

                    print("\(value1) / \(value2)")
                }
            }
        }
    }
    healthStore.execute(sampleQuery)
    }

obj c需要,但很容易转换。作为基础帮助很大:)谢谢:)兄弟为什么谓词不起作用?我刚刚尝试了这个,当我添加一个谓词只读取今天的数据时,查询停止工作。甚至不会抛出错误。