Ví dụ: khi chuyển một value
thông báo đến một NSInteger
phiên bản như vậy
[a value]
nó gây ra EXC_BAD_ACCESS.
Vậy làm thế nào để chuyển đổi một NSInteger
thành int
?
Nếu nó có liên quan, chỉ những số nhỏ <32 được sử dụng.
Ví dụ: khi chuyển một value
thông báo đến một NSInteger
phiên bản như vậy
[a value]
nó gây ra EXC_BAD_ACCESS.
Vậy làm thế nào để chuyển đổi một NSInteger
thành int
?
Nếu nó có liên quan, chỉ những số nhỏ <32 được sử dụng.
Câu trả lời:
Ta da:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
không có gì khác hơn một 32/64 bit int. (nó sẽ sử dụng kích thước thích hợp dựa trên hệ điều hành / nền tảng bạn đang chạy)
Nếu bạn muốn thực hiện điều này nội dòng, chỉ cần truyền NSUInteger
hoặc NSInteger
đến một 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
giá trị thay cho một int
. Trong cả hai trường hợp, đây không phải là một giải pháp đa dòng.
Tôi không chắc về các trường hợp bạn cần chuyển đổi một NSInteger
thành mộtint
.
NSInteger chỉ là một typedef:
NSInteger Được sử dụng để mô tả một số nguyên độc lập với việc bạn đang xây dựng cho hệ thống 32 bit hay 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
Bạn có thể sử dụng NSInteger
bất kỳ nơi nào bạn sử dụng int
mà không cần chuyển đổi nó.
Thường được sử dụng trong UIsegmentedControl, "lỗi" xuất hiện khi biên dịch trong 64bits thay vì 32bits, cách dễ dàng để không chuyển nó sang một biến mới là sử dụng mẹo này, add (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
thay vì :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];