Na przykład podczas przekazywania value
wiadomości do takiej NSInteger
instancji
[a value]
powoduje to EXC_BAD_ACCESS.
Jak więc przekonwertować NSInteger
na int
?
Jeśli ma to znaczenie, używane są tylko małe liczby <32.
Na przykład podczas przekazywania value
wiadomości do takiej NSInteger
instancji
[a value]
powoduje to EXC_BAD_ACCESS.
Jak więc przekonwertować NSInteger
na int
?
Jeśli ma to znaczenie, używane są tylko małe liczby <32.
Odpowiedzi:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
to nic innego jak 32/64 bitowe int. (użyje odpowiedniego rozmiaru w zależności od używanego systemu operacyjnego / platformy)
Jeśli chcesz to zrobić w tekście, po prostu prześlij NSUInteger
lub NSInteger
do 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
wartości zamiast int
. W żadnym przypadku nie jest to rozwiązanie wieloliniowe.
Nie jestem pewien co do okoliczności, w których trzeba zamienić rozszerzenie NSInteger
na int
.
NSInteger to po prostu nazwa typu:
NSInteger Używany do opisywania liczby całkowitej niezależnie od tego, czy tworzysz dla systemu 32-bitowego czy 64-bitowego.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Możesz użyć NSInteger
dowolnego miejsca, którego używasz, int
bez jego konwersji.
Powszechnie używany w UIsegmentedControl, "błąd" pojawia się podczas kompilacji w 64-bitowej zamiast 32-bitowej. Łatwym sposobem na nieprzekazanie go do nowej zmiennej jest skorzystanie z tych wskazówek, dodaj (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
zamiast :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];