如果字符串中出现意外字符,则NSNumberFormatter返回nil

时间:2013-08-08 20:33:32

标签: ios null nsnumberformatter

我正在尝试将数字的用户输入从UITextView(而不是UITextField转换为字符串转换为数字的原因。虽然当用户通过iPhone上的十进制键盘输入数据时没有问题,但是使用蓝牙键盘(或者在模拟器中使用键盘,用户可以输入非数字字符,或者可以点击返回键。 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];

正如我所说,如果用户输入4242.5,这可以正常工作,但如果她输入42.5<Return>(只能通过键盘完成),那么{{ 1}}是self.value 注意:我添加了nil模式以尝试解决问题,但无济于事。

我已经检查了Stack Overflow上的其他答案(很多人都问过类似的问题),但我发现的答案只是确认是,setLenient只会解析,而不是验证,如果它无法解析它将返回零。这并没有解决问题。别人怎么处理这个?这一定是一个普遍的问题......

1 个答案:

答案 0 :(得分:1)

您应该实现委托方法textView:shouldChangeTextInRange:replacementText:。在其实现中,如果允许编辑完成并尝试使用格式化程序从该文本中获取数字,则应创建存在的文本。如果您得到一个号码,请允许编辑。如果没有,请拒绝编辑。