Самый быстрый способ запросить аптечку для получения всех образцов activeEnergyBurned, исключая образцы из тренировок - PullRequest
0 голосов
/ 18 мая 2019

Не знаю, как создать один запрос, чтобы получить информацию, требуемую в заголовке.

В настоящее время мой код в псевдо-коде

    - for each workout, get the activeEnergyBurned samples via a query and add them to a set (allWorkoutSamplesSet)
    - get all samples, via a query, put them in a set (allSamples)
    - allSamples.subtract(allWorkoutSamplesSet)

Это означает, что для получения ответа необходимо выполнить несколько запросов (number_of_workouts + 1)

Пример зацикливания на тренировках

        for workout in workouts {
            let workoutPredicate = HKQuery.predicateForObjects(from: workout)
            let compoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [datePredicate, workoutPredicate])
            let query = HKSampleQuery(sampleType: quantityType, predicate: compoundPredicate,
                                      limit: 0, sortDescriptors: nil) { (sampleQuery, results, error) -> Void in
                                        if let error = error {
                                            if error._code == self.dbInaccessibleErrCode {
                                                dbLocked = true
                                            } else {
                                                throwError = true
                                                errorMesg = error.localizedDescription
                                            }
                                        } else {
                                            if let workoutSamples = results as? [HKQuantitySample] {
                                                allWorkoutSamplesSet.formUnion(workoutSamples)
                                            }
                                        }
                                        blockFuncDispatchGroup.leave()
            }
            blockFuncDispatchGroup.enter()
            hkHealthStore.execute(query)
        }

Мой текущий код работает, но я надеюсь, что есть решение для одного запроса.

...