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

这是代码:

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

我无法告诉您有关搜索词的任何信息,它来自条形码扫描仪,并且是ean-13。我也无法重现崩溃,因为这仅发生在我的客户身上。

最佳答案

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

长度说明符l表示其参数需要为longunsigned long,与Swift中的IntUInt等效。

String Format Specifiers

如果要使用Int64值作为格式参数,则正确的长度说明符为ll,这意味着long long等效于Swift中的Int64

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

您可能需要修复一些其他零件,但由于隐藏了其他零件,因此我看不到。 (据我测试,我无法使我的测试应用程序崩溃。)此外,您是否100%确信Int64(searchTerm)!不会崩溃?

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

关于ios - 将String强制转换为Int64会导致32位设备崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45539424/

10-13 06:34