将字符串转换为Int64会导致32位设备崩溃

Sim*_* C. 1 32-bit int64 ios swift

我必须处理一个非常长的Int,它作为一个String来到我身边.呼叫 Int64(String)在64位设备上运行正常,但我看到32位设备崩溃.这是什么原因?

这是代码:

let predicateBarcode = NSPredicate(format: "barcode = %ld", Int64(searchTerm)!)
Run Code Online (Sandbox Code Playgroud)

我不知道有什么关于searchterm,它来自条形码扫描仪,是一个ean-13.我也无法重现崩溃,因为这只发生在我的顾客身上.

OOP*_*Per 6

这不是问题,Int64.init(_:)而是给出的格式问题NSPredicate.

长度说明符l意味着它的参数必须是long或者unsigned long等同于IntUInt在Swift中.

字符串格式说明符

如果要将Int64value用作格式参数,则使用正确的长度说明符ll,这意味着long long它与Int64Swift中的相同.

let predicateBarcode = NSPredicate(format: "barcode = %lld", Int64(searchTerm)!)
Run Code Online (Sandbox Code Playgroud)

您可能需要修复其他部分,但我无法看到您隐藏其他部分.(而且就我的测试而言,我无法让我的测试应用程序崩溃.)此外,你是100% - 关于Int64(searchTerm)!可能不会崩溃吗?

无论如何,格式字符串至少需要修复.