将 String 转换为 Int64 导致 32 位设备崩溃

Cast String to Int64 causes crash on 32bit devices

我必须处理一个很长的 Int,它以字符串的形式出现。呼唤 Int64(String) 在 64 位设备上工作正常,但我看到在 32 位设备上崩溃。这是什么原因?

代码如下:

let predicateBarcode = NSPredicate(format: "barcode = %ld", Int64(searchTerm)!)

关于 searchterm,我无法透露任何信息,它来自条形码扫描仪,是一个 ean-13。我也无法重现崩溃,因为这只发生在我的客户身上。

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

长度说明符l表示它的参数需要是longunsigned long,相当于[=36=中的IntUInt ].

String Format Specifiers

如果要使用 Int64 值作为格式参数,正确的长度说明符是 ll,意思是 long long 相当于 Int64 in Swift.

let predicateBarcode = NSPredicate(format: "barcode = %lld", Int64(searchTerm)!)

您可能需要修复其他部分,但我看不到,因为您隐藏了其他部分。 (据我测试,我无法让我的测试应用程序崩溃。)此外,您是否 100% 确定 Int64(searchTerm)! 不会崩溃?

无论如何,格式字符串至少需要固定。