AppWillTerminate 调用的函数崩溃
Crash on function called by AppWillTerminate
我收到很多报告称 applicationWillTerminate
调用了一个函数,不完全是因为这个,但我觉得问题的根源可能与此有关。我从 Fabric.io Crashlytics 获得这些报告。无论如何,导致崩溃的报告行如下:
return Int(NSDate().timeIntervalSince1970 * 1000)
此代码在大多数情况下也能正常工作,但在崩溃列表中排名靠前。谁能给我任何提示,说明为什么会崩溃。
我的猜测是您的崩溃来自 32 位设备,其中 Int(NSDate().timeIntervalSince1970 * 1000)
是不可能的,因为 NSDate().timeIntervalSince1970 * 1000
大于 Int.max
。
这里有一些 playground 代码可以证明这是真的:
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"
我收到很多报告称 applicationWillTerminate
调用了一个函数,不完全是因为这个,但我觉得问题的根源可能与此有关。我从 Fabric.io Crashlytics 获得这些报告。无论如何,导致崩溃的报告行如下:
return Int(NSDate().timeIntervalSince1970 * 1000)
此代码在大多数情况下也能正常工作,但在崩溃列表中排名靠前。谁能给我任何提示,说明为什么会崩溃。
我的猜测是您的崩溃来自 32 位设备,其中 Int(NSDate().timeIntervalSince1970 * 1000)
是不可能的,因为 NSDate().timeIntervalSince1970 * 1000
大于 Int.max
。
这里有一些 playground 代码可以证明这是真的:
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"