HKObserverQuery для тренировки с маршрутом - PullRequest
0 голосов
/ 04 сентября 2018

Я хочу быть на связи, когда создается новая тренировка, особенно тренировка с GPS-маршрутом.

Я продолжаю в три этапа:

1 / Чтобы быть в курсе новых тренировок, я делаю HKObserverQuery:

let query = HKObserverQuery(
     sampleType: HKObjectType.workoutType(),
     predicate: nil,
     updateHandler: {  query, completionHandler,eerro ddsf error in
          // 1.  HKSampleQuery to extract the new workout
          // 2. foreach new workout returned by the query load optional GPS trace (see step 2 below)
     })

2 / Для каждой извлеченной тренировки я пытаюсь загрузить дополнительный маршрут GPS с HKSampleQuery в виде массива HKWorkoutRoute

let workoutRouteType = HKSeriesType.workoutRoute()
let workoutPredicate = HKQuery.predicateForObjects(from: self.workout)
let sort = NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)
let workoutRoutesQuery = HKSampleQuery(
     sampleType: workoutRouteType,
     predicate: workoutPredicate,
     limit: HKObjectQueryNoLimit,
     sortDescriptors: [sort],
     { (query, samples, error) in
          // store the trace as an array of HKWorkoutRoute
          self.workoutRoutes = (samples as? [HKWorkoutRoute]) ?? []
     })

3 / Для каждого маршрута тренировки я пытаюсь загрузить маршрут GPS с помощью HKWorkoutRouteQuery на каждый маршрут HKWorkoutRoute, извлеченный на шаге 2

for routeSample:HKWorkoutRoute in self.workoutRoutes {
     let routeQuery = HKWorkoutRouteQuery(route: routeSample, dataHandler: { (originRouteQuery, locations, done, error) in
          // store the locations
     }
}

Проблема в том, что когда вызывается HKObserverQuery updateHandler, я нашел тренировку, которая должна иметь GPS-трассировку, НО шаг 2 / не находит никаких данных . Если я попытаюсь повторить несколько минут спустя тот же код на той же тренировке, я найду маршрут GPS.

Что-то не так в моем процессе? Нужно ли использовать другой метод (молчаливое уведомление)?

...