Jak przekonwertować nsinteger na int?

Na przykład, gdy przekazujesz value wiadomość do NSInteger instancji jak tak

[a value] powoduje EXC_BAD_ACCESS.

Więc jak przekonwertować NSInteger na int?

Jeśli ma to znaczenie, używane są tylko małe liczby

Author: Abizern, 2009-11-18

4 answers

Ta da:

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

NSInteger to nic więcej niż 32/64 bitowy int. (użyje odpowiedniego rozmiaru w zależności od używanego systemu operacyjnego / platformy)

 186
Author: Dave DeLong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-17 07:16:27

Jeśli chcesz to zrobić inline, po prostu wrzuć NSUInteger lub NSInteger do 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
 27
Author: Samuel Clay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-03 23:23:43

Nie jestem pewien, w jakich okolicznościach trzeba przekształcić NSInteger na int.

NSInteger to tylko typedef:

NSInteger Używane do opisu liczby całkowitej niezależnie od tego, czy budujesz system 32-bitowy, czy 64-bitowy.

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

Możesz użyć NSInteger dowolnego miejsca, w którym używasz int, bez jego konwersji.

 17
Author: Abizern,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-24 12:12:00

Często używane w UIsegmentedControl, "błąd" pojawia się podczas kompilacji w 64 bitach zamiast 32 bitach, łatwym sposobem na nie przekazanie go do nowej zmiennej jest użycie tych wskazówek, dodaj (int):

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

Zamiast:

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
 0
Author: grominet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-12 19:42:10