更具体的NSNumberFormatter失败行为

时间:2010-04-26 21:02:21

标签: objective-c cocoa macos validation nsnumberformatter

我有一个NSTextField我需要用户在最大值和最小值之间输入一个数字,如果我能检测到NSNumberFormatter何时无法通过特定测试,我会很高兴要么显示更好的消息(“数字太大”不是很有帮助,它需要显示有效范围)或者只是将字段自动设置为最接近的有效值。

我查看了NSTextField委托的‑control:didFailToFormatString:errorDescription:方法,该方法似乎不允许您修改错误,我看过覆盖NSNumberFormatter的{ {1}}方法确实给了我‑getObjectValue:forString:range:error:我可以修改的方法,但似乎没有任何方法可以确定返回了哪个特定错误。

由于我只是输入一个简单的整数,我不需要NSError中的大部分功能,从头开始编写自己的格式化程序会更好吗?

2 个答案:

答案 0 :(得分:1)

有一种方法可以确定NSError中返回的错误。 NSError error codes documentation定义了最大和最小验证失败的错误。只需将-code发送到您的NSError对象。

答案 1 :(得分:1)

我建议您不要在NSNumberFormatter中强制执行这些限制,而是在textDidChange:上发生的逻辑中强制执行这些限制。从您的描述中,您听起来可能正在使用界面构建器来连接您的数字格式化程序。相反,我会让你的控制器为特定的文本字段NSTextFieldDelegate。然后,您可以直接处理与数字格式化程序的交互,并且可以适当地设置特定错误标签的文本。此外,这允许您提供更复杂的上下文相关回退值。 Aka:在某些情况下,您可能总是希望数字回落到中间范围,或者更低端,或更旧的值,或者用户跑过的边缘。这也可以让你强制执行中断范围,或者将特别长的小数强制转换为整齐的特定精度。