Come posso verificare che NSInteger sia valido?NSInteger! = Nil
NSInteger previousScore = [[self score] integerValue];
if (previousScore != nil) {
//do something
}
Come posso verificare che NSInteger sia valido?NSInteger! = Nil
NSInteger previousScore = [[self score] integerValue];
if (previousScore != nil) {
//do something
}
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.
Grazie. Grande idea. Sto leggendo dentro e fuori da plist quindi tutto nella serie deve essere NSNumber. – intomo
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
.
definito come: #if __LP64__ typedef long NSInteger; #else typedef int NSInteger; endif –
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 ... –
sfortunatamente, nil è 0. prova "po nil == 0" nel debugger. Stampa "true" – nont
salutation rimosso: "Grazie in anticipo.", Non farlo la volta successiva –