2011-01-25 12 views

Respuesta

16

Si myNSNUmber es NSNumber, el código debe leer,

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

Si es NSInteger, puede compararlo directamente con un literal entero. Porque NSInteger es un tipo de datos primitivo.

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

Nota: Asegúrese de que usted no tiene * en su declaración. Sus NSInteger declaraciones deben leer,

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

se basa el siguiente en respuesta @ de BoltClock, que se ha publicado recientemente here


Sin embargo, si usted necesita usar un puntero a un NSInteger (es decir, NSInteger *) por alguna razón, entonces usted necesita para eliminar la referencia al puntero para obtener el valor:

if (*myNSNUmber == 11) { 
} 

+0

NSNumber es una estructura, por lo que no puedes compararla con un número entero. Lo que Simon ha publicado es correcto. –

+0

intValue no funciona - Recibo un error de receptor no válido – TheLearner

+0

'myNSNumber' es NSInteger o' NSNumber'? Si es 'NSInteger', asegúrese de no tener' * 'en la declaración. – EmptyStack

3

NSInteger es normalmente un tipo int normal por lo que su código debe trabaja bien.

si myNSNumber un objeto NSNumber (como nombre de la variable indica), entonces usted debe extraer su valor int:

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