Я хочу быть на связи, когда создается новая тренировка, особенно тренировка с 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.
Что-то не так в моем процессе? Нужно ли использовать другой метод (молчаливое уведомление)?