Преобразование 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)! может не врезаться?

В любом случае строка формата должна быть исправлена ​​как минимум.

Другие вопросы по тегам