Я имею NSTextField
в который мне нужен пользователь для введения номера между макс. и минута, и было бы хорошо, если я мог бы обнаружить когда NSNumberFormatter
проваливает тот конкретный тест, таким образом, я могу или отобразиться, более хорошее сообщение ("Число является слишком большим", не очень полезно, это должно отобразить допустимый диапазон), или просто установите поле автоматически на ближайшее допустимое значение.
Я посмотрел на NSTextField
делегат ‑control:didFailToFormatString:errorDescription:
метод, который, кажется, не позволяет Вам изменять ошибку, и я посмотрел на переопределение NSNumberFormatter
‑getObjectValue:forString:range:error:
метод, который действительно дает мне NSError
то, что я могу изменить, но там, кажется, не способ определить, какая определенная ошибка была возвращена.
Так как я просто ввожу простое целое число, мне не нужна большая часть функциональности в NSNumberFormatter
, я был бы более обеспечен просто запись моего собственного средства форматирования с нуля?
Есть способ определить, какая ошибка возвращается в NSError. Документация по кодам ошибок NSError определяет ошибки как для максимальных, так и для минимальных ошибок проверки. Просто отправьте -код вашему объекту NSError.
Я бы порекомендовал, чтобы вместо применения этих ограничений в NSNumberFormatter
вы применяли их в логике, которая встречается в textDidChange:
. Судя по вашему описанию, вы можете использовать конструктор интерфейсов для подключения модуля форматирования номеров. Вместо этого я бы сделал ваш контроллер NSTextFieldDelegate
для конкретных текстовых полей. Затем вы можете напрямую управлять взаимодействием с модулем форматирования чисел и соответствующим образом установить текст для конкретной метки ошибки. Кроме того, это позволяет вам давать более сложные контекстно-зависимые резервные значения. Также: в некоторых случаях вы всегда можете захотеть, чтобы число возвращалось к среднему диапазону, или к нижнему пределу, или к более старому значению, или к тому краю, на который переехал пользователь. Это также позволит вам установить диапазоны затемнения или преобразовать исключительно длинные десятичные дроби в точную конкретную точность.