【问题标题】:Double value cannot be converted to Int64 because it is either infinite or NaNDouble 值无法转换为 Int64,因为它要么是无限的要么是 NaN
【发布时间】:2017-06-01 12:48:51
【问题描述】:

我是 swift 新手,我正在 swift 3.0 中开发一个项目,我有一个 UISlider 可以拖动。一旦我拖动它,我就会收到以下崩溃消息:“双值无法转换为 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")
        }
    }
}

【问题讨论】:

  • 您的打印语句输出什么 - “持续时间...”?为什么不打印 sender.value、Float64(sender.value) 和 totalsecs 呢?一旦你可以看到所有的值,可能会很明显......
  • 持续时间为 nan
  • 您是否查看了currentitem.duration nan 的 Google 点击次数?

标签: ios swift


【解决方案1】:

尝试按照错误信息进行操作...

“双值不能转换为 Int64,因为它要么是无限的要么是 NaN” - 你说它在 let seekTime = CMTime(value: Int64(val), timescale: 1) 行...

所以...由于该行使用 Int64(val),很明显 是问题所在:val 是无限的或 NaN。

所以...val 被设置为let val = Float64(sender.value) * totalsecstotalsecs 由持续时间let totalsecs = CMTimeGetSeconds(duration) 设置...

而且...你说duration 是 NaN。

找出为什么 duration 是 NaN,你就有答案了。

【讨论】:

  • 我得到了 val 和 duration 值 nan
  • 是的...如果 duration 是 NaN 并且您使用持续时间将值分配给 val,那么 当然 @987654332 @ 将是 NaN。 “找出为什么 duration 是 NaN,你就有答案了。”
猜你喜欢
  • 2021-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2019-08-28
  • 2015-01-26
  • 2020-02-08
  • 2012-11-06
相关资源
最近更新 更多