Преобразование String в Int64 приводит к сбою на 32-разрядных устройствах.
Мне приходится иметь дело с довольно длинным Int, который приходит ко мне как String. призвание Int64(String)
отлично работает на 64-битных устройствах, но я вижу сбой на 32-битных устройствах. Что является причиной этого?
Вот код:
let predicateBarcode = NSPredicate(format: "barcode = %ld", Int64(searchTerm)!)
Я ничего не могу сказать о поисковике, он исходит от сканера штрих-кода и является ean-13. Я также не могу воспроизвести аварию, так как это происходит только с моими клиентами.
1 ответ
Это не проблема Int64.init(_:)
но проблема формата, данного NSPredicate
,
Спецификатор длины l
означает, что его аргумент должен быть long
или же unsigned long
, которые эквивалентны Int
или же UInt
в Свифте.
Если вы хотите использовать Int64
значение в качестве аргумента формата, правильный указатель длины ll
, имея в виду long long
что эквивалентно Int64
в Свифте.
let predicateBarcode = NSPredicate(format: "barcode = %lld", Int64(searchTerm)!)
Возможно, вам придется исправить некоторые другие детали, но я не вижу, как вы прячете другие детали. (И насколько я тестирую, я не мог заставить мое тестирующее приложение аварийно завершиться.) Кроме того, вы на 100% уверены в Int64(searchTerm)!
может не врезаться?
В любом случае строка формата должна быть исправлена как минимум.