Misalnya saat menyampaikan value
pesan ke NSInteger
instance seperti itu
[a value]
itu menyebabkan EXC_BAD_ACCESS.
Jadi bagaimana mengkonversi NSInteger
ke int
?
Jika relevan hanya angka kecil <32 yang digunakan.
Misalnya saat menyampaikan value
pesan ke NSInteger
instance seperti itu
[a value]
itu menyebabkan EXC_BAD_ACCESS.
Jadi bagaimana mengkonversi NSInteger
ke int
?
Jika relevan hanya angka kecil <32 yang digunakan.
Jawaban:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
tidak lebih dari int 32/64 bit. (ini akan menggunakan ukuran yang sesuai berdasarkan OS / platform apa yang Anda jalankan)
Jika Anda ingin melakukan ini sebaris, cukup transmisikan NSUInteger
atau NSInteger
ke 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
nilai sebagai pengganti int
. Dalam kedua kasus ini, ini bukan solusi multi-garis.
Saya tidak yakin tentang keadaan di mana Anda perlu mengonversi NSInteger
menjadi int
.
NSInteger hanyalah typedef:
NSInteger Digunakan untuk mendeskripsikan integer secara independen apakah Anda sedang membuat untuk sistem 32-bit atau 64-bit.
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Anda dapat menggunakan NSInteger
tempat mana pun yang Anda gunakan int
tanpa mengubahnya.
Biasanya digunakan di UIsegmentedControl, "error" muncul saat mengompilasi dalam 64bits, bukan 32bits, cara mudah untuk tidak meneruskannya ke variabel baru adalah dengan menggunakan tips ini, tambahkan (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
dari pada :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];