web-dev-qa-db-fra.com

Comment convertir un NSInteger en int?

Par exemple, lorsque vous transmettez un message value à une instance NSInteger comme ceci

[a value] il provoque un EXC_BAD_ACCESS.

Alors, comment convertir une NSInteger en int?

Si c'est pertinent, seuls de petits nombres <32 sont utilisés.

90
Jeffrey

Ta da:

NSInteger myInteger = 42;
int myInt = (int) myInteger;

NSInteger n'est rien d'autre qu'un int de 32/64 bits. (il utilisera la taille appropriée en fonction du système d'exploitation/de la plate-forme que vous utilisez)

191
Dave DeLong

Si vous voulez faire cela en ligne, transformez simplement NSUInteger ou NSInteger en 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
28
Samuel Clay

Je ne suis pas sûr des circonstances dans lesquelles vous devez convertir une NSInteger en une int.

NSInteger est juste un typedef:

NSInteger Utilisé pour décrire un entier, que vous construisiez pour un système 32 bits ou 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

Vous pouvez utiliser NSInteger n’importe quel endroit où vous utilisez une int sans le convertir.

18
Abizern

Communément utilisé dans UIsegmentedControl, "erreur" apparaît lors de la compilation en 64bits au lieu de 32bits, un moyen facile de ne pas la passer à une nouvelle variable consiste à utiliser ces astuces, ajoutez (int)

[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];

au lieu de :

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
0
grominet