Ошибка NSNumberFormatter с нулевым значением

Должно быть, я упускаю что-то очень очевидное, но я все просмотрел и не могу найти решение.

В Interface Builder я подключил NSNumberFormatter к NSTextField, я привязал значение к значению с плавающей запятой. Все работает как положено, номер проверяется и обновляется. Если я не введу пустую строку, в этом случае я получаю исключение:

Exception detected while handling key input.
[<ResolutionSetting 0x11d029430> setNilValueForKey]: could not set nil as the value for the key scale.

Есть ли способ заставить NSTextField возвращать пустую строку (@"") вместо nil, если текстовое поле пусто? В качестве альтернативы, есть ли способ, чтобы NSNumberFormatter обрабатывал нулевые значения?


person Vik    schedule 24.04.2012    source источник


Ответы (2)


По умолчанию метод setNilValueForKey: создает исключение. Вам необходимо реализовать этот метод в своем коде, чтобы переопределить поведение по умолчанию. Например, чтобы присвоить значение 0,0, когда ничего не вводится. Пример:

- (void)setNilValueForKey:(NSString *)key{
//here you can either assign @"" or 0.0
}

Вы также можете указать минимальное и максимальное значения в инспекторе атрибутов средства форматирования чисел.

Эта тема рассматривается в «Руководстве по программированию кодирования ключ-значение» в документации Apple, а также в главе 7 «Программирование какао для Mac OS X».

person Eugene Tulushev    schedule 24.04.2012
comment
Спасибо за ответ. Я пробовал этот подход, и хотя он удаляет исключение, текстовое поле остается пустым. (Вместо этого он не должен допускать нулевых значений и отображать всплывающее уведомление с просьбой ввести допустимое число.) - person Vik; 25.04.2012

Установите nilSymbol вашего NSNumberFormatter в непустую строку.

Затем NSTextField больше не генерирует исключение, а жалуется пользователю, что "" является недопустимым значением. Я не уверен, почему это работает, но это самое простое решение, которое я нашел.

yourNumberFormatter.nilSymbol = "?"
person John    schedule 15.03.2017