2011-11-27 10 views
6

Così ho il seguente codice:iOS non può verificare se l'oggetto è nullo

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

} 

txtName è un UITextField, quello che sto facendo di sbagliato? Sto cercando di visualizzare del testo solo quando l'utente digita qualcosa nella casella.

migliori saluti,

risposta

0

Soluzione trovata! ![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) {

leggerlo come "Se il testo è nullo o la lunghezza non è 0"

txtName.text non è mai nil (si può semplicemente confrontare con nil per un nulla controllare, a proposito) - la casella di testo contiene sempre del testo, anche se è vuoto. Quindi il primo disgiunto è sempre vero, e la scatola apparirà sempre.

+2

E un'istanza di NSString non è mai uguale alla istanza Singleton NSNull. –

+0

Quindi c'è un modo per ottenere questo ... o? http://screencast.com/t/XJ9AZm7Cs – Uffo

11

testo in un campo di testo è un NSString istanza o nil valore, è mai uguale al caso di NSNull classe (che è non lo stesso nil). Quindi, dal momento che il primo confronto è sempre vero, l'intera condizione if viene valutata come vera e viene visualizzato il messaggio.

Si potrebbe correggere il vostro se la condizione per

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

o, come l'invio di un messaggio di lunghezza al nil restituirà 0 comunque solo avere

if (txtName.text.length != 0) 

anche se io di solito uso la prima opzione con 2 confronti

+0

Ancora non funziona: guarda qui http://screencast.com/t/XJ9AZm7Cs, qualche soluzione? – Uffo

+0

Sei sicuro di aver compilato le modifiche? – Eiko

+0

Beh, sì ho compilato: (ma ancora non funziona ... – Uffo

3

Ho lo stesso problema come te. Questo problema si riferisce alla classe NSNull. Ed ecco il mio codice per verificare che l'oggetto sia nullo.

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

Spero che questo possa essere d'aiuto.

+0

Dovrebbe essere '[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

Si prega di provare questo:

quando il valore di myObj è nullo o < null>

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

// your code 

} 
Problemi correlati