Comment convertir un NSInteger à un int?
-
20-09-2019 - |
Question
Par exemple lors du passage d'un message à une instance value
NSInteger
comme si
[a value]
il provoque une EXC_BAD_ACCESS.
Alors, comment convertir un NSInteger
à int
?
Si c'est seulement un petit nombre pertinents <32 sont utilisés.
La solution
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
est rien de plus qu'un int 32/64 bits. (Il utilisera la taille appropriée en fonction de ce que vous êtes OS / plate-forme en cours d'exécution)
Autres conseils
Si vous voulez faire en ligne, juste jeté le NSUInteger
ou NSInteger
à 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
Je ne sais pas sur les circonstances dans lesquelles vous avez besoin de convertir un NSInteger
à un int
.
NSInteger est juste un typedef:
NSInteger Utilisé pour décrire un nombre entier indépendamment du fait que vous êtes la construction de 32 bits ou un système 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
ne importe quel endroit que vous utilisez un int
sans le convertir.
Généralement utilisé dans UIsegmentedControl, « erreur » apparaît lors de la compilation en 64bits au lieu de 32bits, moyen facile pour passer pas à une nouvelle variable est d'utiliser ces trucs et astuces, ajoutez (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
au lieu de:
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];