2012-03-14 8 views
36

Pregunta rápida: ¿es posible enviar un NSInteger a un objeto NSNumber? Necesito convertir la etiqueta de un objeto UIImageView a un objeto NSNumber porque necesito pasarlo como argumento a una función.¿Es posible enviar un NSInteger a NSNumber?

+0

Es absolutamente posible emitir un NSInteger a un NSNumber *. El resultado probablemente conducirá a un bloqueo. Por supuesto, si tiene un número x, puede usar @ (x) para crear un objeto NSNumber con el valor x. Lo cual funcionará, pero no es un elenco. – gnasher729

Respuesta

99

No se puede emitir porque NSInteger no es un objeto, solo un alias para un tipo incorporado. Siempre se puede crear un nuevo NSNumber objeto desde NSInteger, así:

NSNumber *myNum = @(myNsIntValue); 

o en la versión anterior del compilador, utilice

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 
+1

Esta respuesta produce una advertencia en los nuevos dispositivos de 64 bits. Por favor, vea la respuesta más precisa de @ Kevin a continuación. –

+0

@FullDecent Editado, gracias! – dasblinkenlight

6

Ésta es la respuesta más correcta y no va a producir inesperada error.

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 

Debido a que el doc dijo:

"numberWithInteger:. crea y devuelve un objeto NSNumber que contiene un valor dado, tratándolo como una NSInteger"

"numberWithInt: Crea y devuelve un objeto NSNumber que contiene un valor dado, tratándolo como un int firmado".

15

desde Apple LLVM Compiler 4.0, hay una manera más fácil para crear NSNumber objeto:

NSNumber *x = @1234; 
NSNumber *y = @(anIntegerVariable); 
+1

NSNumber * z = @ (aDoubleValue); funciona igual de bien. – gnasher729