NSTextField:integerValue行为不一致

时间:2018-10-29 14:50:47

标签: objective-c macos cocoa nstextfield

我发现[NSTextField integerValue]的行为与包含数千个分隔符的值不同,具体取决于该值的设置方式。

(我在德国,所以在这些示例中,成千上万的分隔符是点“。”。)

  • 如果我呼叫[myTextField setIntegerValue:4567],则文本字段将包含 4.567 (带有tousands分隔符),并且[myTextField integerValue]返回4567。

  • 如果我手动在文本字段中输入值 4.567 info或使用[myTextField setStringValue:@"4.567"],则[myTextField integerValue]仅返回 4

显然,即使在调用setIntegerValue时本身插入了这样的分隔符,它也会在千位分隔符处停止解析数字。

所以我实际上有两个问题:

  1. 在使用-setIntegerValue:时是否有设置或其他简便的方法可以防止其格式化数字?
  2. 调用-integerValue时,我可以“启用”解析的数字来理解/接受数千个分隔符吗?或者,如果不是,从NSString解析带有千位分隔符的数字的最简单方法是什么?

2 个答案:

答案 0 :(得分:3)

在情节提要或XIB中的文本字段中添加数字格式化程序(NSNumberFormatter)。这样会使单元格的内容和文本字段的objectValue成为NSNumber而不是NSString

  

在使用-setIntegerValue时是否有设置或其他简单的方法可以阻止它格式化数字??

关闭格式化程序的分组分隔符。

  

调用-integerValue时,我可以“启用”数字解析功能来理解/接受数千个分隔符吗?

打开格式化程序的分组分隔符并将“主要分组”设置为3。

  

或者,如果不是,从NSString解析带有千位分隔符的数字的最简单方法是什么?

使用NSNumberFormatter,请参阅类参考和Number Formatters

答案 1 :(得分:1)

integerValue不支持区域设置,它将始终使用.作为小数点。

您应该改用NSNumberFormatter.numberFromString:

Link to NSNumberFormatter class reference.