删除与锻炼相关联的所有数据样本
Delete all data samples linked to a workout
当从“健康”应用程序中删除具有其他样本链接到它的锻炼 HKHealthStore.healthStore.add(_:, to:, completion:)
时,系统会提示您是否只想删除锻炼或链接数据,如下面的屏幕截图所示:
我正在尝试在我正在构建的应用程序中重新创建相同的功能,我想知道是否有一个简单的 API 可以以简单的方式执行此操作。
只删除锻炼可以用一个简单的方法来完成HKHealthStore.delete(_:,completion:)
but I cannot find a way to load (or delete) all linked data all together. HKHealthStore.deleteObjects(of:, predicate:, withCompletion:)
seems promising by passing a predicate created with HKQuery.predicateForObjects(from:)
,但是你似乎不能指定一个匹配任何类型对象的类型。
有没有一种我没有看到的简单方法可以做到这一点,或者我必须手动删除我知道已链接到锻炼的每个对象类型?
如果你想删除一个锻炼和这个锻炼的所有样本 link。
您首先需要使用 HKSampleQuery 获取要删除的锻炼。
一旦你拿到它。
您别无选择,可以 link 将所有样本类型保存到您的锻炼中。您可以使用函数,例如:
private func samplesTypeLinkedToWorkout() -> [HKObjectType] {
return [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!,
HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!,
HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceCycling)!,
HKSeriesType.workoutRoute()
]
}
通过使用 HKQuery.predicateForObjects(来自:HKWorkout)找到锻炼的所有 HKSamples link 并删除它们:
let workoutObjectsPredicate = HKQuery.predicateForObjects(from: workoutInHealthKit)
samplesTypeLinkedToWorkout().forEach {
self.healthKitStore.deleteObjects(of: [=11=], predicate: workoutObjectsPredicate) { (_, _, _) in }
}
删除它们后,您只需使用以下命令删除锻炼:
healthKitStore.delete(workoutInHealthKit) { (deleteSucceed, _) in
completion(deleteSucceed)
}
当从“健康”应用程序中删除具有其他样本链接到它的锻炼 HKHealthStore.healthStore.add(_:, to:, completion:)
时,系统会提示您是否只想删除锻炼或链接数据,如下面的屏幕截图所示:
我正在尝试在我正在构建的应用程序中重新创建相同的功能,我想知道是否有一个简单的 API 可以以简单的方式执行此操作。
只删除锻炼可以用一个简单的方法来完成HKHealthStore.delete(_:,completion:)
but I cannot find a way to load (or delete) all linked data all together. HKHealthStore.deleteObjects(of:, predicate:, withCompletion:)
seems promising by passing a predicate created with HKQuery.predicateForObjects(from:)
,但是你似乎不能指定一个匹配任何类型对象的类型。
有没有一种我没有看到的简单方法可以做到这一点,或者我必须手动删除我知道已链接到锻炼的每个对象类型?
如果你想删除一个锻炼和这个锻炼的所有样本 link。
您首先需要使用 HKSampleQuery 获取要删除的锻炼。 一旦你拿到它。 您别无选择,可以 link 将所有样本类型保存到您的锻炼中。您可以使用函数,例如:
private func samplesTypeLinkedToWorkout() -> [HKObjectType] {
return [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!,
HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!,
HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceCycling)!,
HKSeriesType.workoutRoute()
]
}
通过使用 HKQuery.predicateForObjects(来自:HKWorkout)找到锻炼的所有 HKSamples link 并删除它们:
let workoutObjectsPredicate = HKQuery.predicateForObjects(from: workoutInHealthKit)
samplesTypeLinkedToWorkout().forEach {
self.healthKitStore.deleteObjects(of: [=11=], predicate: workoutObjectsPredicate) { (_, _, _) in }
}
删除它们后,您只需使用以下命令删除锻炼:
healthKitStore.delete(workoutInHealthKit) { (deleteSucceed, _) in
completion(deleteSucceed)
}