2010-08-11 13 views
5

Tengo este extraño problema probando la propiedad de texto vacío (o nulo). Aquí mi configuración: Tengo una vista con 6 campo de texto en el mismo y que aquí el código que utilizo para ir a través de los campo (cargado en una matriz de NSMutable) ...UITextField: prueba de propiedad de texto para cadena vacía o nulo o nulo no funciona

NSEnumerator *portsEnumerator = [appliancePorts objectEnumerator]; 
UITextField *tmpField; 
newSite.port = [NSMutableArray array]; 
while (tmpField =[portsEnumerator nextObject]) { 
    NSLog(@"value:%@",tmpField.text); 
    if (![tmpField.text isEqualToString:nil]) { 
     [newSite.port addObject:(NSString *)tmpField.text]; 
    } 
} 

Cuando estoy en esta interfaz y escriba algún texto en las dos primeras campo y la ficha "sólo" el campo remaning y el botón "Done" esto es lo que tengo de salida GDB:

2010-08-10 20:16:54.489 myApp[4883:207] value:Value 1 

2010-08-10 20:16:58.115 myApp[4883:207] value:Value 2 

2010-08-10 20:17:02.002 myApp[4883:207] value: 

2010-08-10 20:17:13.034 myApp[4883:207] value: 

2010-08-10 20:17:15.854 myApp[4883:207] value: 

2010-08-10 20:17:17.762 myApp[4883:207] value: 

sé que si pongo a prueba de cadena vacía que debería funcionar porque la propiedad de texto al volcar a la consola muestra esto:

UITextField: 0x5d552a0; frame = (20 8; 260 30); text = ''; clipsToBounds = YES; opaque = NO; tag = 1; layer = CALayer: 0x5d54f20 

Pero el problema REAL comienza cuando retrocedo la vista, ingrese un texto en los dos primeros campos y el botón "Hecho" inmediatamente después (no pasando por el otro campo para que no se enfoquen). Esto es de nuevo la salida GDB ...

2010-08-10 20:23:27.902 myApp[4914:207] value:Value 1 

2010-08-10 20:23:31.739 myApp[4914:207] value:Value 2 

2010-08-10 20:23:34.523 myApp[4914:207] value:(null) 

2010-08-10 20: 23: 56.443 myApp [4914: 207] * Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', razón: '* - [NSMutableArray InsertObject: atIndex:]: intento de insertar objeto nulo en 2'

por lo tanto, los problemas evidentes es que la primera isEqualtoString:nil no funciona y en segundo lugar, ¿cómo es que este cambio de texto '' a nulo en cuestión de poner el foco en el campo.

Entonces, ¿hay una mejor manera de probar el campo vacío?

Gracias!

+0

si está utilizando UITextView continuación http://stackoverflow.com/a/8238742/1660139 – Haider

+0

si está utilizando UITextView entonces este enlace ayudaría http://stackoverflow.com/a/8238742/1660139 – Haider

Respuesta

21

que tienden a utilizar

if (![tmpField.text length]) 

Esto se lo pierda si bien nula o @ "". es decir, encuentra la longitud de la cadena, y si es 0 (que sería el caso si la cadena estuviera vacía o nula) no ejecuta el comando IF.

+0

+1 - mucho mejor manera – jrtc27

+0

Este trabajo, a excepción de la negación al principio. Quítalo y funciona para '' o cadena nula. ¡Gracias!Pero aún así, me pregunto por qué poner el foco en un cambio de campo de texto es el valor de texto de nulo a ''?!? –

3

¿Qué tal

if (![tmpField.text isEqualToString:@""]) 
  • que las pruebas de una cadena vacía, no es una cadena nula.

Hay muchas otras maneras, incluida la prueba de la longitud de la cadena. Tenga en cuenta que puede enviar un mensaje a un objeto nil sin problemas, por lo que si tmpField.text fuera nulo, la prueba tendría éxito (y se bloquearía al intentar agregar un objeto nil a su matriz), pero la prueba que desea es envíe un mensaje al objeto NSString preguntando si está vacío o no.

+0

Esto funcionará solo si el campo obtuvo el foco porque obtiene una '' cuerda. Pero si el campo no tiene el foco, entonces obtienes un nulo y esta prueba falla. –

Cuestiones relacionadas