Более определенное поведение отказа NSNumberFormatter

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

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

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

6
задан Rob Keniger 27 April 2010 в 02:59
поделиться

2 ответа

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

1
ответ дан 17 December 2019 в 20:30
поделиться

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

1
ответ дан 17 December 2019 в 20:30
поделиться