Задержка событий на круге из HKLiveWorkoutBuilder workoutBuilderDidCollectEvent - PullRequest
0 голосов
/ 23 января 2020

У меня проблема с демонстрацией плавания Simple HealthKit на Apple Watch, над которыми я работаю. Я интегрируюсь с HKLiveWorkoutBuilder и пытаюсь просто подсчитать количество кругов, которые пользователь плавает в крытом бассейне.

Я получаю последние данные от workoutBuilder(_ workoutBuilder: HKLiveWorkoutBuilder, didCollectDataOf collectedTypes: Set<HKSampleType>). Тем не менее, workoutBuilderDidCollectEvent для типа данных круга поступает с задержкой на 20+ секунд, что приводит к действительно неточным данным. Кто-нибудь еще сталкивался с чем-то подобным с HealthKit раньше? Код ниже:

static func sessionConfiguration(with poolLength: Measurement<UnitLength>) -> HKWorkoutConfiguration {
        let config = HKWorkoutConfiguration()
        config.activityType = .swimming
        config.locationType = .indoor
        config.swimmingLocationType = .pool
        config.lapLength = HKQuantity(unit: poolLength.unit.asHKUnit, doubleValue: poolLength.value)
        return config
    }
func workoutBuilderDidCollectEvent(_ workoutBuilder: HKLiveWorkoutBuilder) {
        guard let event = workoutBuilder.workoutEvents.last else { return }

        let collectionInterval = (collectionTime: Date(), start: event.dateInterval.start, end: event.dateInterval.end)
        switch event.type {
        case .lap:

            WKInterfaceDevice.current().play(.notification)

            let style: SwimmingStrokeStyle
            if let metadata = event.metadata, let styleNum = metadata[HKMetadataKeySwimmingStrokeStyle] as? NSNumber, let s = SwimmingStrokeStyle(rawValue: styleNum.intValue) {
                style = s
            } else {
                style = .unknown
            }
            Collected.lap(style: style.rawValue, interval: collectionInterval).saveToDatabase()
        case .segment:
            Collected.segment(interval: collectionInterval).saveToDatabase()
        default:
            WKInterfaceDevice.current().play(.notification)
            break
        }
    }

Для более подробной информации. Я получаю событие ниже круга:

(lldb) po workoutBuilder.workoutEvents.last
▿ Optional<HKWorkoutEvent>
  - some : HKWorkoutEventTypeLap, <_NSConcreteDateInterval: 0x1569aa60> (Start Date) 2020-01-23 19:51:47 +0000 + (Duration) 22.497641 seconds = (End Date) 2020-01-23 19:52:09 +0000 {
    HKSwimmingStrokeStyle = 2;
}

Полный круг после того, как он показывает завершенный круг: 2020-01-23 19:52:32 + 0000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...