我是斯威夫特的新手,我正在斯威夫特3.0中的一个项目中工作,我有一个UISlider来拖动。一旦我拖动它,就会出现以下崩溃:“Double value不能转换为Int64,因为它要么是无限的,要么是NaN”。我的代码如下。我该如何克服这个错误??. 崩溃的行是“let seekTime=CMTime(value:Int64(val),timescale:1)”。。。

@IBAction func sliderValueChanged(_ sender: UISlider) {

    if let duration = player?.currentItem?.duration {

        let totalsecs = CMTimeGetSeconds(duration)
        print("Durtion :",totalsecs)
        let val = Float64(sender.value) * totalsecs

        let totalduration = CMTimeGetSeconds(duration) as Float64

        if(val != totalduration){

            let seekTime = CMTime(value: Int64(val), timescale: 1)
            player?.seek(to: seekTime, completionHandler: { (completedSeek) in

            })
        }else{
            print("Slider dragged error")
        }
    }
}

最佳答案

尝试跟踪错误消息。。。
“Double value不能转换为Int64,因为它要么是无穷大要么是NaN”-你说它在let seekTime = CMTime(value: Int64(val), timescale: 1)行上。。。
所以。。。因为这条线使用的是Int64(val)问题很明显:val要么是无穷大要么是NaN。
所以。。。val被设置为let val = Float64(sender.value) * totalsecs,而totalsecs由持续时间设置。。。
还有。。。你说let totalsecs = CMTimeGetSeconds(duration)是NaN。
找出为什么duration是NaN,你就有了答案。

关于ios - double 值不能转换为Int64,因为它是无穷大或NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44308016/

10-13 03:24