Swift HKWorkoutSessionLegate:workoutSession(u:didGenerate:)暂停检测问题

Swift HKWorkoutSessionLegate:workoutSession(u:didGenerate:)暂停检测问题,swift,watchkit,appdelegate,healthkit,pause,Swift,Watchkit,Appdelegate,Healthkit,Pause,我正在为Apple Watch构建跑步训练,但我在实现“自动暂停”功能时遇到了问题。 hkworkoutsessionlegate:workoutSession(\uu:didGenerate:)委托应该获取系统生成的一些暂停事件 我遇到的问题是,我的会话从未启动:暂停事件会立即发送给代理 我的代码: func workoutSession(_ workoutSession: HKWorkoutSession, didGenerate event: HKWorkoutEvent) {

我正在为Apple Watch构建跑步训练,但我在实现“自动暂停”功能时遇到了问题。
hkworkoutsessionlegate:workoutSession(\uu:didGenerate:)
委托应该获取系统生成的一些暂停事件

我遇到的问题是,我的会话从未启动:暂停事件会立即发送给代理

我的代码:

func workoutSession(_ workoutSession: HKWorkoutSession, didGenerate event: HKWorkoutEvent) {
            // press 2 buttons
            if(event.type == HKWorkoutEventType.pauseOrResumeRequest) {
                print("Detected Press")
                if workoutData.isPaused == false {
                    pauseWorkout()
                }
                else {
                    resumeWorkout()
                }
            }

            // Auto-pause
            if event.type == HKWorkoutEventType.motionPaused && workoutSettings.autoPause {
                print("Auto Pause")
                pauseWorkout()
            }
            if event.type == HKWorkoutEventType.motionResumed && workoutSettings.autoPause {
                print("Auto Resume")
                resumeWorkout()
            }
        }
问题出现在“//自动暂停”部分。
我错过了什么吗?

我终于找到了应对这种情况的方法。 当我收到.motionPaused或.MotionResume事件时,我必须手动将.pause和.resume事件添加到训练生成器中,以使总训练时间准确。 苹果的文档中没有对此进行解释,所以我希望它能帮助其他面临同样问题的人。 通过执行此操作,自动暂停/恢复工作正常:

case .motionPaused:
            toggleSessionDisplayState(.paused)
            // manually add pause event to fix workout duration
            workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .pause, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])])  { (success, error) in
                if error != nil {
                    print(error!)
                }
            }
            os_log("Auto Pause Builder Event")
            
case .motionResumed:
            toggleSessionDisplayState(.running)
            // manually add resume event to fix workout duration
            workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .resume, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])])  { (success, error) in
                if error != nil {
                    print(error!)
                }
            }
            os_log("Auto Resume Builder Event")

我终于找到了处理这种情况的办法。 当我收到.motionPaused或.MotionResume事件时,我必须手动将.pause和.resume事件添加到训练生成器中,以使总训练时间准确。 苹果的文档中没有对此进行解释,所以我希望它能帮助其他面临同样问题的人。 通过执行此操作,自动暂停/恢复工作正常:

case .motionPaused:
            toggleSessionDisplayState(.paused)
            // manually add pause event to fix workout duration
            workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .pause, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])])  { (success, error) in
                if error != nil {
                    print(error!)
                }
            }
            os_log("Auto Pause Builder Event")
            
case .motionResumed:
            toggleSessionDisplayState(.running)
            // manually add resume event to fix workout duration
            workoutBuilder.addWorkoutEvents([HKWorkoutEvent(type: .resume, dateInterval: DateInterval(start: Date(),duration: 0), metadata: [:])])  { (success, error) in
                if error != nil {
                    print(error!)
                }
            }
            os_log("Auto Resume Builder Event")

我发现了主要问题:当我收到自动暂停事件时,我将HKWorkoutSession置于“暂停”模式。然后,会话暂停,不会自动生成任何恢复事件。因此,我必须避免暂停会议。困难在于要考虑训练的持续时间(因为如果我不暂停HKWorkoutSession,则在自动暂停期间,构建器的延迟时间会继续增加)。在保存到HealthKitSo之前,我必须检查如何修改训练持续时间。。。调查之后,我面临着另一个问题。HKLiveWorkoutBuilder能够在经过的时间内处理手动暂停,因为我们可以使用HKWorkoutSession的pause()和resume()方法。但是对于motionPaused和motionresumenl,我们不能使用这些方法,并且生成器在自动暂停时不会停止经过的时间。有人有什么建议吗?苹果的文档非常简短……我发现了主要问题:当我收到自动暂停事件时,我将HKWorkoutSession置于“暂停”模式。然后,会话暂停,不会自动生成任何恢复事件。因此,我必须避免暂停会议。困难在于要考虑训练的持续时间(因为如果我不暂停HKWorkoutSession,则在自动暂停期间,构建器的延迟时间会继续增加)。在保存到HealthKitSo之前,我必须检查如何修改训练持续时间。。。调查之后,我面临着另一个问题。HKLiveWorkoutBuilder能够在经过的时间内处理手动暂停,因为我们可以使用HKWorkoutSession的pause()和resume()方法。但是对于motionPaused和motionresumenl,我们不能使用这些方法,并且生成器在自动暂停时不会停止经过的时间。有人有什么建议吗?苹果的文档很短。。。