Healthkit несколько HKAnchoredObjectQuery не возвращает данные для всех типов образцов

Я использую HKAnchoredObjectQuery с updateHandler для получения нескольких типов образцов данных HealthKit, но он возвращает данные только для "HKQuantityTypeIdentifierStepCount", а не для других типов HKSampleTypes. Ниже приведен код, который я использую. Любая помощь приветствуется.

func readHealthKitData (type: HKSampleType) {

    let onAnchorQueryResults : ((HKAnchoredObjectQuery, [HKSample]?, [HKDeletedObject]?, HKQueryAnchor?, NSError?) -> Void)! = {
        (query:HKAnchoredObjectQuery, addedObjects:[HKSample]?, deletedObjects:[HKDeletedObject]?, newAnchor:HKQueryAnchor?, nsError:NSError?) -> Void in

        if (addedObjects?.count > 0)
        {

            // var addDict = [String : AnyObject]()
            for obj in addedObjects! {
                let hkValue = obj as? HKQuantitySample
                if(hkValue?.UUID.UUIDString != nil){
                    print("TypeName:",type.isEqual("HKQuantityTypeIdentifierHeartRate"))
                    switch  type {
                    case  HKQuantityType.quantityTypeForIdentifier(HKQuantityTypeIdentifierHeartRate)!:
                        let val =  (hkValue?.quantity.doubleValueForUnit(HKUnit(fromString: "count/min")))!
                        let uuid : String = (hkValue?.UUID.UUIDString)!

                    case HKSampleType.quantityTypeForIdentifier(HKQuantityTypeIdentifierStepCount)!:
                        let val =  (hkValue?.quantity.doubleValueForUnit(HKUnit.countUnit()))!
                        let uuid : String = (hkValue?.UUID.UUIDString)!


                    case HKObjectType.quantityTypeForIdentifier(HKQuantityTypeIdentifierBodyMass)!:
                        let val =  ((hkValue?.quantity.doubleValueForUnit(HKUnit.gramUnit()))!/1000.0)
                        let uuid : String = (hkValue?.UUID.UUIDString)!

                    default:
                        break

                    }

                }
            }

        }

    }

    let queryEndDate = NSDate()
    print("Before Start: ")
    print(self.queryStartDate)
    let predicate: NSPredicate = HKAnchoredObjectQuery.predicateForSamplesWithStartDate(self.queryStartDate, endDate: queryEndDate, options: HKQueryOptions.None)

    let anchoredQuery = HKAnchoredObjectQuery(type: type, predicate: predicate, anchor: hkAnchor, limit: 0, resultsHandler: onAnchorQueryResults)
    anchoredQuery.updateHandler = onAnchorQueryResults
    healthStore.executeQuery(anchoredQuery)
    self.queryStartDate = queryEndDate


}}

2 ответа

Решение

Это ожидается. Инициализатор запроса принимает параметр типа, который возвращает только результаты этого типа. Вы не можете запросить несколько типов образцов с помощью одного запроса.

Вы можете использовать эту инициализацию, доступную для iOS 15.0 и выше.

      init(queryDescriptors: [HKQueryDescriptor], 
anchor: HKQueryAnchor?, 
limit: Int, 
resultsHandler handler: @escaping (HKAnchoredObjectQuery, [HKSample]?, [HKDeletedObject]?, HKQueryAnchor?, Error?) -> Void)
Другие вопросы по тегам