ตัวอย่างเช่นเมื่อส่งvalue
ข้อความไปยังNSInteger
อินสแตนซ์เช่นนั้น
[a value]
มันทำให้เกิด EXC_BAD_ACCESS
ดังนั้นวิธีการแปลงNSInteger
ไปint
?
หากเกี่ยวข้องจะใช้เพียงตัวเลขเล็ก ๆ <32
ตัวอย่างเช่นเมื่อส่งvalue
ข้อความไปยังNSInteger
อินสแตนซ์เช่นนั้น
[a value]
มันทำให้เกิด EXC_BAD_ACCESS
ดังนั้นวิธีการแปลงNSInteger
ไปint
?
หากเกี่ยวข้องจะใช้เพียงตัวเลขเล็ก ๆ <32
คำตอบ:
ตาดา:
NSInteger myInteger = 42;
int myInt = (int) myInteger;
NSInteger
ไม่มีอะไรมากไปกว่า int 32/64 บิต (จะใช้ขนาดที่เหมาะสมตามระบบปฏิบัติการ / แพลตฟอร์มที่คุณใช้งานอยู่)
หากคุณต้องการทำสิ่งนี้ในบรรทัดเพียงแค่ส่ง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
NSInteger
ค่าแทนint
. ไม่ว่าในกรณีใดจะเป็นโซลูชันแบบหลายบรรทัด
ผมไม่แน่ใจว่าเกี่ยวกับสถานการณ์ที่คุณจำเป็นต้องแปลงไปยังNSInteger
int
NSInteger เป็นเพียง typedef:
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
โดยไม่ต้องแปลง
ที่ใช้กันทั่วไปใน UIsegmentedControl "error" จะปรากฏขึ้นเมื่อคอมไพล์เป็น 64bits แทนที่จะเป็น 32bits วิธีง่ายๆในการไม่ส่งต่อไปยังตัวแปรใหม่คือการใช้เคล็ดลับนี้เพิ่ม(int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
แทน :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];