Как преобразовать NSInteger в Int? - PullRequest
91 голосов
/ 18 ноября 2009

Например, при передаче сообщения value в экземпляр NSInteger, например,

[a value] вызывает EXC_BAD_ACCESS.

Так как же конвертировать NSInteger в int?

Если это уместно, используются только маленькие цифры <32. </p>

Ответы [ 4 ]

195 голосов
/ 18 ноября 2009

Та да:

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

NSInteger - это не более чем 32/64 битное целое число. (он будет использовать соответствующий размер в зависимости от используемой ОС / платформы)

28 голосов
/ 04 января 2012

Если вы хотите сделать это встроенным, просто приведите 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
18 голосов
/ 18 ноября 2009

Я не уверен в обстоятельствах, когда вам нужно конвертировать NSInteger в int.

NSInteger - просто определение типа:

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 без его преобразования.

0 голосов
/ 12 мая 2014

Обычно используемый в UIsegmentedControl, «ошибка» появляется при компиляции в 64-битных, а не в 32-битных системах. Простой способ не передавать ее в новую переменную - использовать эти советы, добавив (int) :

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

вместо:

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
...