2010-04-26 7 views
6

Tengo un NSTextField en el que necesito que el usuario ingrese un número entre un máximo y un mínimo, y sería bueno si pudiera detectar cuándo el NSNumberFormatter falla esa prueba en particular, así puedo mostrar un mensaje más agradable ("El número es demasiado grande" no es muy útil, necesita mostrar el rango válido) o simplemente establecer el campo automáticamente al valor válido más cercano.Comportamiento de falla NSNumberFormatter más específico

He mirado en el método de NSTextField delegado ‑control:didFailToFormatString:errorDescription: que no parece que permitirá modificar el error, y yo he mirado anulando el NSNumberFormatter 's ‑getObjectValue:forString:range:error: método que me hace dar una NSError que pueda modificar , pero no parece haber ninguna forma de determinar qué error específico se devolvió.

Dado que acabo de ingresar un número entero simple, no necesito la mayoría de las funciones en NSNumberFormatter, ¿sería mejor que escribiera mi propio formateador desde cero?

Respuesta

1

Hay una manera de determinar qué error se devuelve en un NSError. El NSError error codes documentation define errores para la validación máxima y mínima. Simplemente envíe -code a su objeto NSError.

+0

Gracias, pero NSFormattingErrorMinimum/Maximum solo significa que son el inicio y el final de los códigos de error de formateo. El código de error devuelto es 2048 sin importar cuál es el error de formato que parece. –

1

Recomendaría que en lugar de hacer cumplir esos límites en el NSNumberFormatter, los aplique en la lógica que ocurre en textDidChange:. Según su descripción, parece que está utilizando el constructor de interfaces para conectar su formateador de números. En su lugar, haría que su controlador fuera NSTextFieldDelegate para los campos de texto en particular. Luego puede manejar directamente la interacción con el formateador de número y puede configurar el texto para una etiqueta de error en particular de manera apropiada. Además, esto le permite ofrecer valores de respaldo dependientes del contexto más complejos. Aka: en algunos casos, es posible que siempre desee que el número vuelva a caer en un rango medio, o en el extremo inferior, o en un valor anterior, o en cualquier borde que el usuario recorra. Esto también le permitiría imponer límites de oscurecimiento, o forzar los decimales excepcionalmente largos en una precisión específica clara.

Cuestiones relacionadas