HKObserver查询锻炼路线

时间:2018-09-04 19:50:46

标签: ios apple-watch health-kit

我想在创建新锻炼时保持联系,尤其是具有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路线。

我的过程中有问题吗?我是否必须使用另一种方法(静默通知)?

0 个答案:

没有答案