I думаю ваша проблема с линией
NSDecimalNumber* currencyNumber = [[NSDecimalNumber alloc] initWithDecimal:[[fmtrCurrencyFromStr numberFromString:strNumber] decimalValue]];
Попробуйте заменить ее на строку, в основном эквивалентную
NSDecimalNumber * currencyNumber = [fmtrCurrencyFromStr numberFromString:strNumber];
Вы установили generatesDecimalNumbers
, поэтому эти два в значительной степени эквивалентны, за исключением одного раздражающего случая: nil.
Отправка сообщения в nil гарантированно ничего не делает и возвращает 0 для большинства стандартных типов (целое число (кроме не 64-битных целых чисел встарые 32-разрядные среды выполнения), с плавающей запятой, типы указателей);он «возвращает» неинициализированную память, если метод возвращает структуру.NSDecimal - это структура.
(Основная причина, по сути, заключается в том, что среда выполнения не знает, насколько велика структура, поэтому не знает, сколько памяти обнулить, поэтому вместо этого вы получаете «неинициализированную» память.Я обычно нажимаю эту кнопку, когда выполняю v.frame
, не гарантируя, что v не равно nil.)
РЕДАКТИРОВАТЬ: Конечно, вы другие проблемы, почему NSNumberFormatterне правильно разбор цены.Это сложный вопрос.Я бы попробовал удалить символ валюты.