Сбой приложения при попытке установить максимальное значение для UISlider - PullRequest
0 голосов
/ 13 апреля 2020

Когда я пытаюсь воспроизвести видео, я получаю это исключение ниже.

*** Ошибка подтверждения в - [CustomSlider _setValue: minValue: maxValue: andSendAction:], / BuildRoot / Library /Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3698.119.2/UISlider.m:1477

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Попытка установить минимальное значение ползунка (0,000000) должно быть больше максимального значения (нан.) '

libc ++ abi.dylib: завершается с необработанным исключением типа NSException

Это мой code:

Этот фрагмент кода работает нормально, когда я запускаю на устройствах iOS 13, но получаю cra * sh, когда я запускаю его на устройстве iOS 12.3.1.

SDK: iOS 13
Инструмент: XCode 11.3.1
Целевое устройство: iPhone 6S Plus работает iOS 12.3.1

func updateUIforPlayerItemStatus() {
    guard let currentItem = player.currentItem else { return }

    switch currentItem.status {        
    case .readyToPlay:
        playPauseButton.isEnabled = true
        guard player.currentItem!.duration >= CMTime.zero else {
            return
        }

        let newDurationSeconds = Float(currentItem.duration.seconds)

        let currentTime = Float(player.currentTime().seconds)
        timeSlider.minimumValue = 0.0
        timeSlider.maximumValue = newDurationSeconds
        timeSlider.value = currentTime
        timeSlider.isEnabled = true
        durationLabel.isEnabled = true
        durationLabel.text = createTimeString(time: newDurationSeconds)
        player.playImmediately(atRate: playbackRate)            

    default:
        playPauseButton.isEnabled = false
        timeSlider.isEnabled = false
        durationLabel.isEnabled = false
    }
}

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

В сообщении об ошибке говорится, что maximumValue - это NaN (не число), что означает, что newDurationSeconds не является числом, что означает, что currentItem.duration.seconds не является числом. Перед использованием убедитесь, что это не NaN, например:

[...]
guard currentItem.duration >= .zero, !currentItem.duration.seconds.isNaN else {
    return
}

let newDurationSeconds = Float(currentItem.duration.seconds)

[...]
1 голос
/ 13 апреля 2020

Максимальное значение ползунка равно нан, что означает, что продолжительность вашего avPlayer неопределенна, вы можете получить оценку, используя:

    let newDurationSeconds = Float(currentItem.asset.duration.seconds ?? 00)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...