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关:内置函数 - 让你偷懒的工具