Na przykład podczas przekazywania valuewiadomości do takiej NSIntegerinstancji
[a value] powoduje to EXC_BAD_ACCESS.
Jak więc przekonwertować NSIntegerna int?
Jeśli ma to znaczenie, używane są tylko małe liczby <32.
Na przykład podczas przekazywania valuewiadomości do takiej NSIntegerinstancji
[a value] powoduje to EXC_BAD_ACCESS.
Jak więc przekonwertować NSIntegerna int?
Jeśli ma to znaczenie, używane są tylko małe liczby <32.
Odpowiedzi:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSIntegerto 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 NSUIntegerlub NSIntegerdo 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
NSIntegerwartoś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 NSIntegerna 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ć NSIntegerdowolnego miejsca, którego używasz, intbez 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]];