Наприклад, при передачі value
повідомлення NSInteger
подібному екземпляру
[a value]
це викликає EXC_BAD_ACCESS.
Тож як перетворити NSInteger
на int
?
Якщо це доречно, використовуються лише невеликі числа <32.
Наприклад, при передачі value
повідомлення NSInteger
подібному екземпляру
[a value]
це викликає EXC_BAD_ACCESS.
Тож як перетворити NSInteger
на int
?
Якщо це доречно, використовуються лише невеликі числа <32.
Відповіді:
Та да:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
є не що інше, як 32/64 біт int. (він використовуватиме відповідний розмір залежно від того, яку ОС / платформу ви використовуєте)
Якщо ви хочете зробити це вбудовано, просто надішліть NSUInteger
або NSInteger
до 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
значення замість int
. В жодному випадку це багатолінійне рішення.
Я не впевнений в обставинах, коли вам потрібно перетворити NSInteger
на int
.
NSInteger - це просто typedef:
NSInteger Використовується для опису цілого числа незалежно від того, будуєте ви для 32-бітної або 64-бітної системи.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Ви можете використовувати NSInteger
будь-яке місце, яке ви використовуєте, int
не перетворюючи його.
Зазвичай в UIsegmentedControl "помилка" з'являється при компіляції в 64 біт замість 32 біт, простий спосіб не передати її новій змінній - використовувати ці поради, додати (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
замість :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];