Я пытаюсь преобразовать пользовательский ввод числа из UITextView
(а не UITextField
, по причинам, которые занимают слишком много времени) в число. Хотя это не создавало проблем, когда пользователь вводит данные через десятичную клавиатуру на iPhone, используя клавиатуру bluetooth (или используя клавиатуру в симуляторе, пользователь может вводить нечисловые символы или может нажать клавишу возврата. NSNumberFormatter
, чтобы вернуть nil
, что, конечно же, мне не подходит.NSNumberFormatter возвращает nil, если неожиданные символы в строке
Я пытаюсь выяснить, как с этим бороться. Должен ли я создать фильтр, который извлекает только ту часть входной строки, которая имеет допустимые символы в ней Может ли кто-нибудь порекомендовать элегантную/эффективный способ решения этой проблемы
Вот мой код:
static NSNumberFormatter *numberFormatter;
if (numberFormatter==nil) {
numberFormatter=[[NSNumberFormatter alloc] init];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];
[numberFormatter setLenient:YES];
}
self.value = [numberFormatter numberFromString:self.valueTextView.text];
Как я уже сказал, если пользователь вводит 42
, или 42.5
, это работает нормально, но если она вводит 42.5<Return>
(что может быть сделано только с клавиатуры), то self.value
- nil
. Примечание: Я добавил режим setLenient
, чтобы попытаться справиться с проблемой, но безрезультатно.
Я проверил другие ответы на переполнение стека (количество людей задавали подобные вопросы), но ответы, которые я нашел только подтвердить, что да, NSNumberFormatter
только разобрать, не проверить, и если он не может разобрать, что будет return nil. Это не решает проблему. Как другие справляются с этим? Это должна быть общая проблема ...
Что вы хотите, чтобы оно было возвращено, если строка не является числовой? –