我想在创建新锻炼时保持联系,尤其是具有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 /对于每次提取的锻炼,我尝试使用HKSampleQuery作为HKWorkoutRoute数组加载可选的GPS路线
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 /对于每个锻炼路线,我尝试在步骤2提取的每个HKWorkoutRoute上使用HKWorkoutRouteQuery加载GPS路线
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路线。
我的过程中有问题吗?我是否必须使用另一种方法(静默通知)?