Ví dụ: khi chuyển một valuethông báo đến một NSIntegerphiê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 NSIntegerthà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 valuethông báo đến một NSIntegerphiê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 NSIntegerthà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;
NSIntegerkhô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 NSUIntegerhoặ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
NSIntegergiá 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 NSIntegerthà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 NSIntegerbất kỳ nơi nào bạn sử dụng intmà 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]];