Hoe converteer ik een NSInteger naar een int?

Bijvoorbeeld bij het doorgeven van een value-bericht aan een NSInteger-instantie zoals zo

[a value]het veroorzaakt een EXC_BAD_ACCESS.

Dus hoe converteer je een NSIntegernaar int?

Als het relevant is, alleen kleine getallen < 32 worden gebruikt.


Antwoord 1, autoriteit 100%

Ta da:

NSInteger myInteger = 42;
int myInt = (int) myInteger;

NSIntegeris niets meer dan een 32/64 bit int. (het zal de juiste grootte gebruiken op basis van welk besturingssysteem/platform je gebruikt)


Antwoord 2, autoriteit 13%

Als je dit inline wilt doen, cast gewoon de NSUIntegerof NSIntegernaar een 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

Antwoord 3, autoriteit 9%

Ik weet niet zeker in welke omstandigheden je een NSIntegermoet converteren naar een int.

NSInteger is slechts een typedef:

NSInteger
Wordt gebruikt om een ​​geheel getal te beschrijven, ongeacht of u voor een 32-bits of een 64-bits systeem bouwt.

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64 
typedef long NSInteger;
#else
typedef int NSInteger;
#endif

Je kunt NSIntegeroveral gebruiken waar je een intgebruikt zonder deze te converteren.


Antwoord 4

Vaak gebruikt in UIsegmentedControl, verschijnt er een “fout” bij het compileren in 64 bits in plaats van 32 bits. Een gemakkelijke manier om het niet door te geven aan een nieuwe variabele is door deze tips te gebruiken, voeg (int)toe:

[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];

in plaats van:

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];

Other episodes