उदाहरण के लिए जब एक गुजर 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
32/64 बिट इंट से अधिक कुछ नहीं है। (यह आपके द्वारा चलाए जा रहे OS / प्लेटफॉर्म के आधार पर उपयुक्त आकार का उपयोग करेगा)
आप इस इनलाइन क्या करना चाहते हैं, तो बस डाली 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 सिर्फ एक टाइपफ़ेड है:
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 में सामान्य रूप से उपयोग किया जाता है, "त्रुटि" तब दिखाई देती है जब 32 बिट्स के बजाय 64 बिट्स में संकलित किया जाता है, एक नए चर के लिए इसे पास नहीं करने का आसान तरीका इस युक्तियों का उपयोग करना है, जोड़ना (int) :
[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];
के बजाय :
[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];