Wie ein NSInteger in einen int konvertieren?
-
20-09-2019 - |
Frage
Zum Beispiel, wenn wie so eine value
Nachricht an eine NSInteger
Instanz zu übergeben
[a value]
es verursacht eine EXC_BAD_ACCESS.
So wie ein NSInteger
zu int
konvertieren?
Wenn es relevant ist nur eine geringe Anzahl <32 verwendet werden.
Lösung
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
ist nichts anderes als ein 32/64 Bit int. (Es wird die passende Größe verwenden, basierend auf, was OS / Plattform du läufst)
Andere Tipps
Wenn Sie das Inline tun wollen, werfen Sie einfach die NSUInteger
oder NSInteger
zu einem 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
Ich bin mir nicht sicher über die Umstände, unter denen Sie benötigen einen NSInteger
zu einem int
zu konvertieren.
NSInteger ist nur ein typedef:
NSInteger Verwendet, um eine ganze Zahl, unabhängig von zu beschreiben, ob Sie bauen für einen 32-Bit- oder 64-Bit-System.
#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
nutzen jeden Ort, den Sie eine int
verwenden, ohne sie zu konvertieren.
Häufig in UISegmentedControl verwendet, „Fehler“ angezeigt, wenn in 64 Bit anstelle von 32 Bit, einfacher Art und Weise der Zusammenstellung für Geben Sie es nicht auf eine neue Variable wird diese Tipps zu verwenden, fügen Sie (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
statt:
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];