2011-11-27 23 views
6

Así que tengo el siguiente código:IOS no puede comprobar si el objeto es nulo

- (IBAction)doSomething 
{ 
if (txtName.text != (id)[NSNull null] || txtName.text.length != 0) { 
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text]; 
    [lblMessage setText:msg]; 
} 

} 

txtName es un UITextField, lo que estoy haciendo mal? Intento mostrar algo de texto solo cuando el usuario escribe algo en el cuadro.

Best Regards,

Respuesta

0

¡Solución encontrada! ![txtName.text isEqualToString:@""]

- (IBAction)doSomething 
{ 
if (![txtName.text isEqualToString:@""]){ 
    NSString *msg = [[NSString alloc] initWithFormat:@"Hello, %@", txtName.text]; 
    [lblMessage setText:msg];  

} 

} 
6

if (txtName.text != (id)[NSNull null] || txtName.text.length != 0) {

leerlo como "Si el texto es nulo o la longitud no es 0"

txtName.text no es nil (sólo se puede comparar con nil para un nulo compruebe, por cierto) - el cuadro de texto siempre contiene texto de algunos, incluso si está vacío. Entonces, la primera disyunción es siempre verdadera, y la caja siempre aparecerá.

+2

Y una instancia de NSString no es igual a la instancia singleton de NSNull. –

+0

Entonces, ¿hay alguna manera de lograr esto ... o? http://screencast.com/t/XJ9AZm7Cs – Uffo

11

texto en un campo de texto es un NSString instancia o nil valor, nunca es igual a la instancia de NSNull clase (que es no el mismo que nil). Entonces, como la primera comparación siempre es cierta, toda la condición if se evalúa como verdadera y aparece el mensaje.

Se podría corregir su condición if a

if (txtName.text != nil && txtName.text.length != 0) 

o, como el envío de mensajes de longitud a la nula devolverá 0 de todos modos sólo tienen

if (txtName.text.length != 0) 

aunque yo suelo usar la primera opción con 2 comparaciones

+0

Todavía no funciona: mira aquí http://screencast.com/t/XJ9AZm7Cs, ¿alguna solución? – Uffo

+0

¿Seguro que compiló los cambios? – Eiko

+0

Bueno, sí lo compilé :(pero aún no funciona ... – Uffo

3

Tengo el mismo problema que usted. Este problema se relaciona con la clase NSNull. Y aquí está mi código para verificar que el objeto sea nulo.

NSString* text; 
    if([text isKindOfClass:[NSNull class]]) 
    { 
      //do something here if that object is null 
    } 

Espero que te ayudemos.

+0

Debería ser '[NSNull null]' – runmad

1
#define SAFESTRING(str) ISVALIDSTRING(str) ? str : @"" 
#define ISVALIDSTRING(str) (str != nil && [str isKindOfClass:[NSNull class]] == NO) 
#define VALIDSTRING_PREDICATE [NSPredicate predicateWithBlock:^(id evaluatedObject, NSDictionary *bindings) {return (BOOL)ISVALIDSTRING(evaluatedObject);}] 
SAFESTRING(PASS_OBJECT OR STRING); 
0

Por favor, intente esto:

cuando el valor de myObj es nula o < null>

if([myObj isEqual:[NSNull class]] || !myObj) { 

// your code 

} 
Cuestiones relacionadas