我正在开发一个应用程序,旨在分析跑步锻炼,包括心肺健身。因此,我试图阅读其中的vo2max值从HKWorkout。
这对于其他测量也很有效,但V02max始终填充为0.0:
avgWatts = workout
.statistics(for: .init(.runningPower))?
.averageQuantity()?
.doubleValue(for: .watt()) ?? 0
vo2max = workout
.statistics(for: .init(.vo2Max))?
.maximumQuantity()?
.doubleValue(for: HKUnit(from: "ml/kg*min")) ?? 0.0
我认为我也正确设置了权限:
func authorizationDetails(){
let allTypes = Set([HKObjectType.workoutType(),
HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!,
HKObjectType.quantityType(forIdentifier: .distanceCycling)!,
HKObjectType.quantityType(forIdentifier: .distanceWalkingRunning)!,
HKObjectType.quantityType(forIdentifier: .heartRate)!,
HKObjectType.quantityType(forIdentifier: .runningStrideLength)!,
HKObjectType.quantityType(forIdentifier: .vo2Max)!])
healthStore.requestAuthorization(toShare: allTypes, read: allTypes) { (success, error) in
if !success {
// Handle the error here.
}else{
self.isAuthorized=true
}
}
}
我不确定是什么问题,我在苹果文档中找不到相应的信息。是否该数量类型可能在HKWorkout中不可用?
我还尝试使用sumQuantity代替maximumQuantity,但它仍然不提供值:
vo2max = workout
.statistics(for: .init(.vo2Max))?
.sumQuantity()?
.doubleValue(for: HKUnit(from: "ml/kg*min")) ?? 0.0
在其他应用程序中(Eidogg. Health)我可以看到VO2MAX值,所以我假设数据实际上是可用的。
提前感谢您的任何建议。
1条答案
按热度按时间kdfy810k1#
vo2max
的单位是ml/kg/min
,而不是ml/kg*min
。它返回0.0,因为当它为空时,您会赋值0.0。要进一步调试,我会验证表达式的每一步,以确保它是你所期望的。statistics
调用返回一个值吗?它有一个averageQuantity
吗?等等。(但我强烈认为问题出在最后一个变换上,因为它是错误的单位。)另外,一定要确保你正在进行的锻炼实际上有一个VO2Max值,它通常是没有记录的(它有很多要求)。