【问题标题】:App Crashes when try to set the maximumValue to the UISlider尝试将 maximumValue 设置为 UISlider 时应用程序崩溃
【发布时间】:2020-07-25 17:28:36
【问题描述】:

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

*** -[CustomSlider _setValue:minValue:maxValue:andSendAction:] 中的断言失败,/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3698.119.2/UISlider.m:1477

*** 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“尝试将滑块的 minimumValue (0.000000) 设置为大于 maximumValue (nan)”

libc++abi.dylib:以 NSException 类型的未捕获异常终止

这是我的代码:

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

SDK: iOS 13
工具: XCode 11.3.1
目标设备: 运行 iOS 12.3 的 iPhone 6S Plus。 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
    }
}

【问题讨论】:

  • 检查 currentItem.duration.seconds 值。好像是0
  • 我正在使用的所有视频资产的时间都超过 2 秒

标签: ios swift avfoundation avkit


【解决方案1】:

滑块的最大值是 nan,这意味着您的 avPlayer 的持续时间是不确定的,您可以使用以下方法进行估算:

    let newDurationSeconds = Float(currentItem.asset.duration.seconds ?? 00)

【讨论】:

    【解决方案2】:

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

    [...]
    guard currentItem.duration >= .zero, !currentItem.duration.seconds.isNaN else {
        return
    }
    
    let newDurationSeconds = Float(currentItem.duration.seconds)
    
    [...]
    

    【讨论】:

      【解决方案3】:

      持续时间为.Nan时出现此错误,使用此代码修复它

              if let duration = musicPlayer.instance.player.currentItem?.duration {
                  guard duration.isNaN else {
                      return
                  }
                  let seconds : Float64 = duration
              self.sliderAudio.maximumValue = Float(seconds)
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多