Domanda

Per esempio quando si passa un messaggio value a un'istanza NSInteger in questo modo

[a value] provoca un EXC_BAD_ACCESS.

Così come convertire un NSInteger a int?

Se è interessati solo piccoli numeri <32 sono utilizzati.

È stato utile?

Soluzione

Ta da:

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

NSInteger non è altro che un 32/64 bit int. (Userà la dimensione appropriata in base a quale sistema operativo / piattaforma si sta eseguendo)

Altri suggerimenti

Se si vuole fare questo in linea, appena gettato la 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

Non sono sicuro circa le circostanze in cui è necessario convertire un NSInteger a un int.

NSInteger è solo un typedef:

NSInteger Usato per descrivere un intero indipendentemente dal fatto che si stanno costruendo per un 32 bit o un sistema a 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

È possibile utilizzare NSInteger qualsiasi luogo si utilizza un int senza convertirlo.

Comunemente utilizzato in UIsegmentedControl, "errore" compare durante la compilazione in 64bit invece di 32bit, modo semplice per non passare ad una nuova variabile è quello di utilizzare questo consigli, aggiungere (int) :

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

invece che:

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top