Por exemplo, ao passar uma value
mensagem para uma NSInteger
instância como esta
[a value]
isso causa um EXC_BAD_ACCESS.
Então, como converter um NSInteger
para int
?
Se for relevante, apenas pequenos números <32 são usados.
Por exemplo, ao passar uma value
mensagem para uma NSInteger
instância como esta
[a value]
isso causa um EXC_BAD_ACCESS.
Então, como converter um NSInteger
para int
?
Se for relevante, apenas pequenos números <32 são usados.
Respostas:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
nada mais é do que um int de 32/64 bits. (ele usará o tamanho apropriado com base em qual sistema operacional / plataforma você está executando)
Se você quiser fazer isso embutido, apenas transmita 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
NSInteger
valor no lugar de um int
. Em nenhum dos casos é uma solução multilinha.
Não tenho certeza sobre as circunstâncias em que você precisa converter um NSInteger
em um int
.
NSInteger é apenas um typedef:
NSInteger Usado para descrever um número inteiro independentemente de você estar construindo para um sistema de 32 ou 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 usar int
sem convertê-lo.
Normalmente usado em UIsegmentedControl, "erro" aparece ao compilar em 64 bits em vez de 32 bits, uma maneira fácil de não passá-lo para uma nova variável é usar estas dicas, add (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
ao invés de :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];