2017-08-07 69 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

相關問題