【问题标题】:Crash on function called by AppWillTerminate [closed]AppWillTerminate调用的函数崩溃[关闭]
【发布时间】:2017-02-04 22:45:42
【问题描述】:

我收到很多报告称applicationWillTerminate 调用了一个函数,但我觉得问题的根源可能与此有关。我从 Fabric.io Crashlytics 获得这些报告。无论如何,导致崩溃的报告行如下:

return Int(NSDate().timeIntervalSince1970 * 1000)

此代码在大多数情况下也可以正常工作,但已在崩溃列表中上升。谁能给我任何关于为什么这可能会崩溃的提示。

【问题讨论】:

  • 问题是......???
  • 我想弄清楚为什么有时会崩溃。

标签: ios swift twitter-fabric


【解决方案1】:

我的猜测是您的崩溃来自 32 位设备,其中Int(NSDate().timeIntervalSince1970 * 1000) 是不可能的,因为NSDate().timeIntervalSince1970 * 1000 大于Int.max

这里有一个小操场代码来证明这是真的:

let i = Int32.max // max size of Int on 32-bit
i // 2147483647
let j = NSDate().timeIntervalSince1970 * 1000
j // 1486250171084.633

我们可以像这样继续测试它:

// let's try to simulate the crash
Int32(j)
// yup, crash: 
// "Double value cannot be converted to Int32 because the result would be greater than Int32.max"

【讨论】:

  • 只是猜测。但它确实涵盖了(a)有问题的行和(b)“有时”部分! :)
  • 所有崩溃都来自 iPhone 5 及更低版本,因此非常合理。
  • 非常好,感谢您的确认。
  • @chasenyc 根据 Swift 3.1 beta 的发行说明,将会有一个新的 exactly 初始化器系列将失败。因此,如果我理解正确,您可以说let k = Int32(exactly:j)k 将是nil,如果我们不能这样做的话。这将使您避免在这种情况下崩溃。
猜你喜欢
  • 2017-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多