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.

Était-ce utile?

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]];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top