2017-08-07 70 views
0

我必须处理一个相当长的Int,它以字符串的形式出现。调用 Int64(String)在64位设备上正常工作,但我在32位设备上看到崩溃。这是什么原因?将字符串转换为Int64会导致32位设备崩溃

下面是代码:

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

我不能告诉的搜索关键词什么,它来自条形码扫描仪,是一个EAN-13。我也不能重现崩溃,因为这只发生在我的顾客身上。

+2

“Int64”表示32位和64位平台的64位有符号整数。所以通常我们看不到这样的行为。你能展示更多的上下文来重现这个问题吗? – OOPer

+1

请显示您的代码和崩溃的详细信息。 – Paulw11

+0

这真的是你使用的确切代码吗?你的代码不能用Xcode 8.3编译。即使你认为无关紧要,也不要遗漏任何东西。在崩溃时显示'searchTerm'的值。无论如何,即使在64位平台上,您的代码也不是有效的代码。 – OOPer

回答

3

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

长度说明符l意味着它的参数需要是longunsigned long,这等同于Int或夫特UInt

String Format Specifiers

如果你想使用Int64值作为格式的说法,正确的长度说明是ll,这意味着long long这相当于在斯威夫特Int64

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

您可能需要修复其他部分,但我不能看到您正在隐藏其他部分。 (而据我测试,我无法让我的测试应用程序崩溃。)另外,你是否100% - 关于Int64(searchTerm)!可能不会崩溃?

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

+0

谢谢,我会解决这个问题。我另外改变了代码来验证它是什么Int64(searchTerm)不是零。 –

+0

希望你的代码没有其他错误,或者你可以尽快找到它们。祝你好运。 – OOPer

相关问题