ios - 尝试将 maximumValue 设置为 UISlider 时应用程序崩溃

标签 ios swift avfoundation avkit

当我尝试播放视频时,出现以下异常。

*** Assertion failure in -[CustomSlider _setValue:minValue:maxValue:andSendAction:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3698.119.2/UISlider.m:1477

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Attempting to set a slider's minimumValue (0.000000) to be larger than the maximumValue (nan)'

libc++abi.dylib: terminating with uncaught exception of type NSException

这是我的代码:

这段代码在 iOS 13 设备上运行时运行良好,但在 iOS 12.3.1 设备上运行时崩溃。

SDK:iOS 13
工具:XCode 11.3.1
目标设备:运行 iOS 12.3.1 的 iPhone 6S Plus

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
    }
}

最佳答案

错误消息说 maximumValue 是 NaN(不是数字),这意味着 newDurationSeconds 不是数字,这意味着 currentItem.duration。 seconds 不是数字。在使用之前检查以确保它不是 NaN,如下所示:

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

let newDurationSeconds = Float(currentItem.duration.seconds)

[...]

关于ios - 尝试将 maximumValue 设置为 UISlider 时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61183080/

相关文章:

ios - Titanium - 无法为设备构建(com.apple.syslog_relay 错误)

swift - 如何裁剪、修剪视频?

ios - 当 UITableView 完成请求数据时得到通知?

ios - UITableView 嵌套在没有边距的 UICollectionViewCell 中

ios - 包含带有自定义单元格的 Collection View 的 UIViewController xib 文件

swift - 无法推断通用参数 'FalseContent'

iphone - 在 iOS 上处理视频时跳过帧

iphone - AVFoundation 图像变得异常黑暗

ios - 在 NSObject iOS 中取消 objective-c block

ios - 临时免责声明