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.
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)
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
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.
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]];