Например, при передаче сообщения value
экземпляру NSInteger
вот так
[a value]
вызывает ошибку EXC_BAD_ACCESS.
Итак, как преобразовать NSInteger
в int
?
Если это уместно, используются только маленькие числа ‹ 32.
Например, при передаче сообщения value
экземпляру NSInteger
вот так
[a value]
вызывает ошибку EXC_BAD_ACCESS.
Итак, как преобразовать NSInteger
в int
?
Если это уместно, используются только маленькие числа ‹ 32.
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
- это не что иное, как 32/64-битное целое число. (он будет использовать соответствующий размер в зависимости от того, какую ОС/платформу вы используете)
Если вы хотите сделать это встроенным, просто приведите 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
. Ни в том, ни в другом случае это не многолинейное решение.
- person Lily Ballard; 05.01.2012
Я не уверен в обстоятельствах, когда вам нужно преобразовать 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]];