swift V02max始终填充0.0

6rqinv9w  于 2023-02-21  发布在  Swift
关注(0)|答案(1)|浏览(140)

我正在开发一个应用程序,旨在分析跑步锻炼,包括心肺健身。因此,我试图阅读其中的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值,所以我假设数据实际上是可用的。
提前感谢您的任何建议。

kdfy810k

kdfy810k1#

vo2max的单位是ml/kg/min,而不是ml/kg*min。它返回0.0,因为当它为空时,您会赋值0.0。要进一步调试,我会验证表达式的每一步,以确保它是你所期望的。statistics调用返回一个值吗?它有一个averageQuantity吗?等等。(但我强烈认为问题出在最后一个变换上,因为它是错误的单位。)
另外,一定要确保你正在进行的锻炼实际上有一个VO2Max值,它通常是没有记录的(它有很多要求)。

相关问题