Por ejemplo, al pasar un value
mensaje a una NSInteger
instancia como esta
[a value]
provoca un EXC_BAD_ACCESS.
Entonces, ¿cómo convertir un NSInteger
a int
?
Si es relevante, solo se utilizan números pequeños <32.
Por ejemplo, al pasar un value
mensaje a una NSInteger
instancia como esta
[a value]
provoca un EXC_BAD_ACCESS.
Entonces, ¿cómo convertir un NSInteger
a int
?
Si es relevante, solo se utilizan números pequeños <32.
Respuestas:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
no es más que un int de 32/64 bits. (usará el tamaño apropiado según el sistema operativo / plataforma que esté ejecutando)
Si desea hacer esto en línea, simplemente transmita NSUInteger
o NSInteger
a un int
:
int i = -1;
NSUInteger row = 100;
i > row // true, since the signed int is implicitly converted to an unsigned int
i > (int)row // false
NSInteger
valor en lugar de un int
. En ningún caso es una solución multilínea.
No estoy seguro de las circunstancias en las que necesita convertir un NSInteger
en un int
.
NSInteger es solo un typedef:
NSInteger Se utiliza para describir un número entero independientemente de si está compilando para un sistema de 32 bits o de 64 bits.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Puede usar NSInteger
cualquier lugar que use int
sin convertirlo.
Usado comúnmente en UIsegmentedControl, aparece un "error" al compilar en 64 bits en lugar de 32 bits, una forma fácil de no pasarlo a una nueva variable es usar estos consejos, agregar (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
en vez de :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];