Ad esempio, quando si passa un value
messaggio a NSInteger
un'istanza in questo modo
[a value]
provoca un EXC_BAD_ACCESS.
Quindi come convertire un NSInteger
in int
?
Se è rilevante, vengono utilizzati solo numeri piccoli <32.
Ad esempio, quando si passa un value
messaggio a NSInteger
un'istanza in questo modo
[a value]
provoca un EXC_BAD_ACCESS.
Quindi come convertire un NSInteger
in int
?
Se è rilevante, vengono utilizzati solo numeri piccoli <32.
Risposte:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
non è altro che un int a 32/64 bit. (utilizzerà la dimensione appropriata in base al sistema operativo / piattaforma in esecuzione)
Se vuoi farlo in linea, trasmetti semplicemente 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
valore al posto di un int
. In nessuno dei due casi si tratta di una soluzione multilinea.
Non sono sicuro delle circostanze in cui è necessario convertire un NSInteger
in un file int
.
NSInteger è solo un typedef:
NSInteger Utilizzato per descrivere un numero intero indipendentemente dal fatto che si stia creando per un sistema a 32 bit o 64 bit.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Puoi utilizzare NSInteger
qualsiasi luogo in cui utilizzi un int
senza convertirlo.
Comunemente utilizzato in UIsegmentedControl, viene visualizzato "errore" durante la compilazione a 64 bit invece che a 32 bit, un modo semplice per non passarlo a una nuova variabile è utilizzare questi suggerimenti, aggiungere (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
invece di :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];