2011-01-25 14 views

risposta

16

Se myNSNUmber è NSNumber, il codice dovrebbe leggere,

if ([myNSNumber intValue] == 1) { 
    ... 
} 

Se è NSInteger, puoi confrontarlo direttamente con un intero letterale. Perché NSInteger è un tipo di dati primitivo.

if (myNSNumber == 1) { 
    ... 
} 

Nota: Assicurarsi che non si dispone di * nella dichiarazione. I suoi NSInteger dichiarazioni dovrebbero leggere,

NSInteger myNSNUmber; // RIGHT 
NSInteger *myNSNUmber; // WRONG, NSInteger is not a struct, but it is a primitive data type. 

Di seguito si basa su di @ BoltClock risposta, che ha recentemente pubblicato here


Tuttavia, se si ha bisogno di utilizzare un puntatore ad un NSInteger (vale a dire, NSInteger *) per qualche ragione, allora avete bisogno di dereference il puntatore per ottenere il valore:

if (*myNSNUmber == 11) { 
} 

+0

NSNumber è una struttura, quindi non puoi confrontarla con un numero intero. Quello che Simon ha pubblicato è corretto. –

+0

intValue non funziona - Ottengo un errore del ricevitore non valido – TheLearner

+0

'myNSNumber' è NSInteger o' NSNumber'? Se è 'NSInteger' assicurati di non avere' * 'nella dichiarazione. – EmptyStack

3

NSInteger è normalmente un tipo int pianura in modo che il codice dovrebbe funziona bene

se myNSNumber un oggetto NSNumber (come nome di variabile suggerisce), allora si dovrebbe estrarre il suo valore int:

if ([myNSNumber intValue] == 1) 
{ 
... 
} 
Problemi correlati