NSTextField: integerValue ведет себя непоследовательно - PullRequest
0 голосов
/ 29 октября 2018

Я обнаружил, что [NSTextField integerValue] ведет себя по-разному со значениями, содержащими тысячи разделителей, в зависимости от того, как было установлено значение.

(я нахожусь в Германии, поэтому мой разделитель тысяч в этих примерах является точкой ".").

  • Если я позвоню [myTextField setIntegerValue:4567], текстовое поле будет содержать 4,567 (с разделителем тысяч), а [myTextField integerValue] возвращает 4567.

  • Если я введу значение 4,567 , сообщив текстовое поле вручную, или воспользуюсь [myTextField setStringValue:@"4.567"], тогда [myTextField integerValue] вернет просто 4 .

По-видимому, он прекращает синтаксический анализ числа в разделителе тысяч, даже если сам вводит такой разделитель при вызове setIntegerValue.

Итак, у меня фактически два вопроса:

  1. Есть ли настройка или другой простой способ, которым я могу запретить форматировать число при использовании -setIntegerValue:?
  2. Могу ли я "включить" разбор номера, чтобы понять / принять тысячи разделителей при вызове -integerValue? Или, если нет, какой самый простой способ проанализировать число с разделителем тысяч из строки NSString?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Добавьте средство форматирования чисел (NSNumberFormatter) к текстовому полю раскадровки или XIB. Это делает содержимое ячейки и objectValue текстового поля NSNumber вместо NSString.

Есть ли параметр или другой простой способ, которым я могу запретить форматировать число при использовании -setIntegerValue:?

Отключить группировку разделителя форматера.

Могу ли я "включить" анализ числа, чтобы понять / принять разделители тысяч при вызове -integerValue?

Включите разделитель группировки форматера и установите Первичную группировку на 3.

Или, если нет, какой самый простой способ разобрать число с разделителем тысяч из строки NSString?

Используйте NSNumberFormatter, см. Ссылку на класс и Числовые форматеры .

0 голосов
/ 29 октября 2018

integerValue не учитывает локали, всегда будет использовать . в качестве десятичной точки.

Вы должны использовать NSNumberFormatter.numberFromString: вместо.

Ссылка на ссылку на класс NSNumberFormatter.

...