AppWillTerminate调用的函数崩溃[关闭]

Posted

技术标签:

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

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

return Int(NSDate().timeIntervalSince1970 * 1000)

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

【问题讨论】:

问题是......??? 我想弄清楚为什么有时会崩溃。 【参考方案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,如果我们不能这样做的话。这将使您避免在这种情况下崩溃。

以上是关于AppWillTerminate调用的函数崩溃[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Python入门之函数调用——第2关:函数正确调用 - 得到想要的结果

Python入门之函数调用——第1关:内置函数 - 让你偷懒的工具

MFC为啥一关闭对话框就系统崩溃 弹出英语说某个地址不可写。。。?

“纯虚函数调用”崩溃从何而来?

函数调用和函数完成后的C++,游戏完全崩溃

囤货Azure Api网关免费版:一“关”通吃微服务/云函数,真香