Pergunta

Por exemplo, ao passar um value mensagem para um NSInteger instância como assim

[a value] causa um exc_bad_access.

Então, como converter um NSInteger para int?

Se for relevante, apenas pequenos números <32 são usados.

Foi útil?

Solução

Ta da:

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

NSInteger nada mais é do que um bit de 32/64 int. (Ele usará o tamanho apropriado com base no sistema operacional/plataforma que você está executando)

Outras dicas

Se você quiser fazer isso em linha, basta lançar o NSUInteger ou NSInteger para um 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

Não tenho certeza sobre as circunstâncias em que você precisa converter um NSInteger para um int.

NSInteger é apenas um typedef:

O NSInteger costumava descrever um número inteiro de forma independente se você está construindo para um sistema de 32 bits ou de 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

Você pode usar NSInteger Qualquer lugar que você use um int sem convertê -lo.

Comumente usado no uisegmentedcontrol, "erro" aparece quando compilar em 64 bits em vez de 32 bits, uma maneira fácil de não passar para uma nova variável é usar essas dicas, adicione (int):

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

ao invés de :

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top