Zum Beispiel, wenn Sie eine value
Nachricht an eine NSInteger
solche Instanz übergeben
[a value]
es verursacht einen EXC_BAD_ACCESS.
Wie konvertiere ich ein NSInteger
in int
?
Wenn es relevant ist, werden nur kleine Zahlen <32 verwendet.
Zum Beispiel, wenn Sie eine value
Nachricht an eine NSInteger
solche Instanz übergeben
[a value]
es verursacht einen EXC_BAD_ACCESS.
Wie konvertiere ich ein NSInteger
in int
?
Wenn es relevant ist, werden nur kleine Zahlen <32 verwendet.
Antworten:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
ist nichts weiter als ein 32/64 Bit int. (Es wird die entsprechende Größe verwendet, je nachdem, welches Betriebssystem / welche Plattform Sie ausführen.)
Wenn Sie dies inline tun möchten, setzen Sie einfach das NSUInteger
oder NSInteger
auf ein 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
Wert anstelle von a zu verwenden int
. In keinem Fall handelt es sich um eine mehrzeilige Lösung.
Ich bin mir nicht sicher, unter welchen Umständen Sie ein NSInteger
in ein konvertieren müssen int
.
NSInteger ist nur ein typedef:
NSInteger Wird verwendet, um eine Ganzzahl zu beschreiben, unabhängig davon, ob Sie für ein 32-Bit- oder ein 64-Bit-System erstellen.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Sie können NSInteger
jeden Ort verwenden, den Sie verwenden, int
ohne ihn zu konvertieren.
In UIsegmentedControl häufig verwendet, wird beim Kompilieren in 64-Bit statt 32-Bit "Fehler" angezeigt. Eine einfache Möglichkeit, es nicht an eine neue Variable zu übergeben, besteht darin, die folgenden Tipps zu verwenden: add (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
anstatt :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];