2011-01-25 9 views
13

Come posso verificare che NSInteger sia valido?NSInteger! = Nil

NSInteger previousScore = [[self score] integerValue]; 
    if (previousScore != nil) { 
     //do something 
    } 
+0

salutation rimosso: "Grazie in anticipo.", Non farlo la volta successiva –

risposta

14

Se si desidera controllare la validità nel codice, devi fare qualcosa di simile:

NSNumber *previousScore = [self score]; 

if (previousScore != nil) { 
    NSInteger previousScoreValue = [previousScore integerValue]; 
    // do something 
} 

Questo funziona come si stanno ottenendo indietro un oggetto, non un valore di base.

+0

Grazie. Grande idea. Sto leggendo dentro e fuori da plist quindi tutto nella serie deve essere NSNumber. – intomo

12

NSInteger non è un oggetto. È semplicemente una primitiva tipizzata int. Pertanto, non sarà mai nil. Tratta lo stesso come se stessimo usando uno int diretto.

Edit: di esporre sul commento di Cesar, su sistemi a 64 bit NSInteger è in realtà un long e sui sistemi a 32 bit è un int.

+2

definito come: #if __LP64__ typedef long NSInteger; #else typedef int NSInteger; endif –

+5

In realtà per impostazione predefinita in molte situazioni un NSInteger sarà nullo, perché nil è uguale a zero ... si potrebbe comunque ottenere un avvertimento del compilatore. Nel codice di esempio dato previousScore sarebbe 0 (nil) se [self score] è tornato nil ... –

+0

sfortunatamente, nil è 0. prova "po nil == 0" nel debugger. Stampa "true" – nont