Более конкретное поведение при сбое NSNumberFormatter - PullRequest
6 голосов
/ 27 апреля 2010

У меня есть NSTextField, в который мне нужно, чтобы пользователь ввел число от максимума до минимума, и было бы неплохо, если бы я мог определить, когда NSNumberFormatter не проходит этот конкретный тест, чтобы я мог либо отобразить более приятное сообщение («Слишком большое число» не очень полезно, для него необходимо отобразить действительный диапазон) или просто автоматически установите для поля ближайшее ближайшее значение.

Я посмотрел на ‑control:didFailToFormatString:errorDescription: метод делегата NSTextField, который, кажется, не позволяет вам изменить ошибку, и я рассмотрел переопределение ‑getObjectValue:forString:range:error: метода NSNumberFormatter, который дает мне NSError, который я могу изменить, но, похоже, нет никакого способа определить, какая именно ошибка была возвращена.

Поскольку я просто ввожу простое целое число, мне не нужно большинство функций в NSNumberFormatter, было бы лучше написать простой форматер с нуля?

Ответы [ 2 ]

1 голос
/ 14 июня 2010

Я бы рекомендовал вместо применения этих ограничений в NSNumberFormatter применять их в логике, которая встречается в textDidChange:. Из вашего описания вы говорите, что, возможно, вы используете конструктор интерфейса для подключения вашего числового форматера. Вместо этого я бы сделал ваш контроллер NSTextFieldDelegate для конкретных текстовых полей. Затем вы можете напрямую обрабатывать взаимодействие с форматером чисел и можете соответствующим образом установить текст для конкретной метки ошибки. Кроме того, это позволяет вам давать более сложные зависящие от контекста запасные значения. Ака: в некоторых случаях вы всегда можете захотеть, чтобы число вернулось к среднему диапазону, или к нижнему пределу, или к более старому значению, или к тому краю, который перешел пользователь. Это также позволило бы вам применять диапазоны затемнения или приводить исключительно длинные десятичные числа к точной определенной точности.

1 голос
/ 27 апреля 2010

Есть способ определить, какая ошибка возвращается в ошибке NSError. Документация по кодам ошибок NSError определяет ошибки как для максимальной, так и для минимальной неудачи проверки Просто отправьте -код на ваш объект NSError.

...