尝试将 maximumValue 设置为 UISlider 时应用程序崩溃
App Crashes when try to set the maximumValue to the UISlider
当我尝试播放视频时,出现以下异常。
*** 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
目标设备: iPhone 6S Plus 运行ning 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
}
}
滑块的最大值为 nan,这意味着您的 avPlayer 的持续时间是不确定的,您可以使用以下方法进行估算:
let newDurationSeconds = Float(currentItem.asset.duration.seconds ?? 00)
错误信息说maximumValue
是NaN(not-a-number),也就是说newDurationSeconds
不是一个数字,也就是说currentItem.duration.seconds
不是一个数字。在使用之前检查以确保它不是 NaN,如下所示:
[...]
guard currentItem.duration >= .zero, !currentItem.duration.seconds.isNaN else {
return
}
let newDurationSeconds = Float(currentItem.duration.seconds)
[...]
当duration为.Nan时出现此错误,使用此代码修复
if let duration = musicPlayer.instance.player.currentItem?.duration {
guard duration.isNaN else {
return
}
let seconds : Float64 = duration
self.sliderAudio.maximumValue = Float(seconds)
}
当我尝试播放视频时,出现以下异常。
*** 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
目标设备: iPhone 6S Plus 运行ning 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
}
}
滑块的最大值为 nan,这意味着您的 avPlayer 的持续时间是不确定的,您可以使用以下方法进行估算:
let newDurationSeconds = Float(currentItem.asset.duration.seconds ?? 00)
错误信息说maximumValue
是NaN(not-a-number),也就是说newDurationSeconds
不是一个数字,也就是说currentItem.duration.seconds
不是一个数字。在使用之前检查以确保它不是 NaN,如下所示:
[...]
guard currentItem.duration >= .zero, !currentItem.duration.seconds.isNaN else {
return
}
let newDurationSeconds = Float(currentItem.duration.seconds)
[...]
当duration为.Nan时出现此错误,使用此代码修复
if let duration = musicPlayer.instance.player.currentItem?.duration {
guard duration.isNaN else {
return
}
let seconds : Float64 = duration
self.sliderAudio.maximumValue = Float(seconds)
}