gpt4 book ai didi

ios - 删除链接到锻炼的所有数据样本

转载 作者:行者123 更新时间:2023-12-03 19:35:20 25 4
gpt4 key购买 nike

从“健康”应用程序中删除与其他样本链接的锻炼时 HKHealthStore.healthStore.add(_:, to:, completion:) 系统会提示您是否只想删除锻炼或链接数据,如下面的屏幕截图所示:

enter image description here

我正在尝试在我正在构建的应用程序中重新创建相同的功能,我想知道是否有一个简单的 API 可以以简单的方式执行此操作。

可以使用简单的 HKHealthStore.delete(_:,completion:) 仅删除锻炼。但我找不到一种方法来加载(或删除)所有链接的数据。 HKHealthStore.deleteObjects(of:, predicate:, withCompletion:) 通过传递用 HKQuery.predicateForObjects(from:) 创建的谓词似乎很有希望但似乎您无法指定与任何类型的对象匹配的类型。

是否有一种简单的方法可以做到这一点,但我没有看到,或者我必须手动删除我知道已链接到锻炼的每个对象类型?

最佳答案

如果您想删除锻炼和所有样本链接到此锻炼。
您首先需要使用 HKSampleQuery 获取要删除的锻炼。
一旦你取了它。
您无法选择保存可以链接到锻炼的所有样本类型。您可以使用一个函数,例如:

private func samplesTypeLinkedToWorkout() -> [HKObjectType] {
return [
HKObjectType.quantityType(forIdentifier: HKQuantityTypeIdentifier.heartRate)!,
HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceWalkingRunning)!,
HKQuantityType.quantityType(forIdentifier: HKQuantityTypeIdentifier.distanceCycling)!,
HKSeriesType.workoutRoute()
]
}
使用 HKQuery.predicateForObjects(from: HKWorkout) 查找所有指向锻炼的 HKSamples 链接并删除它们:
let workoutObjectsPredicate = HKQuery.predicateForObjects(from: workoutInHealthKit)
samplesTypeLinkedToWorkout().forEach {
self.healthKitStore.deleteObjects(of: $0, predicate: workoutObjectsPredicate) { (_, _, _) in }
}
删除它们后,您只需使用以下命令删除锻炼:
healthKitStore.delete(workoutInHealthKit) { (deleteSucceed, _) in
completion(deleteSucceed)
}

关于ios - 删除链接到锻炼的所有数据样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50161669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com