An NSInteger को इंट में कैसे बदलें?


97

उदाहरण के लिए जब एक गुजर valueएक करने के लिए संदेश NSIntegerइसलिए जैसे उदाहरण

[a value] यह EXC_BAD_ACCESS का कारण बनता है।

तो कैसे कन्वर्ट करने के NSIntegerलिए int?

यदि यह प्रासंगिक है केवल छोटी संख्या <32 का उपयोग किया जाता है।


2
आप उलझे हुए लगते हैं। [एक मूल्य] से पता चलता है कि आप एक वस्तु होने की उम्मीद करते हैं, लेकिन इस समय एक NSInteger है। "एक" में परिवर्तित करने से उस समस्या का समाधान नहीं होगा।
माइक अब्दुल्ला

जवाबों:


205

ता दा:

NSInteger myInteger = 42;
int myInt = (int) myInteger;

NSInteger32/64 बिट इंट से अधिक कुछ नहीं है। (यह आपके द्वारा चलाए जा रहे OS / प्लेटफॉर्म के आधार पर उपयुक्त आकार का उपयोग करेगा)


13
सटीक होने के लिए, मुझे लगता है कि NSInteger 32-बिट प्लेटफॉर्म पर एक इंट, और 64-बिट प्लेटफॉर्म पर एक लंबा है।
Frédéric Adda

5
मुझे सुझाए गए "कास्टिंग" का उपयोग करके एक चेतावनी मिलती है: निहित रूपांतरण पूर्णांक सटीकता खो देता है: 'NSUInteger' (उर्फ 'अहस्ताक्षरित') को 'int'
djcj

@djcj, हां, नए एसडीके के लिए उत्तर सही नहीं है। मुझे लगता है।
आजिक अब्दुल्ला

क्या NSInteger के सामने सिर्फ (int) डालना ज्यादा आसान नहीं होगा? उदाहरण के लिए, (int) myInteger जब भी आप पूर्णांक फॉर्म को कॉल करना चाहते हैं, ताकि आपको एक नया चर बनाने की आवश्यकता न हो।
chandhooguy

2
@chandhooguy आप एक नए चर से बचने की कोशिश क्यों कर रहे हैं?
डेन रोसेनस्टार्क

28

आप इस इनलाइन क्या करना चाहते हैं, तो बस डाली 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

1
जिज्ञासा से बाहर, आप इस सवाल पर 2 साल बाद एक सवाल क्यों पोस्ट कर रहे हैं कि पहले से ही दोहरे अंकों में वोटों के साथ एक स्वीकृत उत्तर है? खासकर जब से तुम्हारा सिर्फ उस जवाब का एक rephrasing है।
लिली बॉलार्ड

6
क्योंकि मेरा जवाब एक लाइन (इनलाइन टाइप कास्ट (इंट)) का उपयोग करना है, जो मुझे लगता है कि ओपी क्या चाहेगा। मैंने इसे स्वयं देखा और इस विषय पर सभी उत्तरों को बहु-पंक्ति में देखा।
शमूएल क्ले

2
स्वीकृत उत्तर एकल पंक्ति का उपयोग करके एक अंतर्निहित रूपांतरण प्रदर्शित करता है। एबिजर्न का उत्तर बताता है कि यदि आप किसी के NSIntegerस्थान पर मान का उपयोग करने का प्रयास करते हैं तो एक अंतर्निहित रूपांतरण होगा int। न तो मामले में यह एक बहु-पंक्ति समाधान है।
लिली बलार्ड

25
मुझे स्पष्ट होना चाहिए था। चूंकि यह कुछ हद तक नौसिखिया सवाल है, यह नौसिखिए प्रोग्रामर के लिए स्पष्ट नहीं हो सकता है कि वे इनलाइन को एक (इंट) अभिव्यक्ति के साथ परिवर्तित कर सकते हैं। अन्य उत्तर यह नहीं दिखाते हैं और मुझे लगता है कि यह इस पृष्ठ पर ठोकर खाने वाले किसी भी व्यक्ति की मदद करता है।
शमूएल क्ले

4
और मैं इस पृष्ठ पर एक और डेढ़ साल बाद ठोकर खाई, विशेष रूप से NSUInteger -related कलाकारों की जरूरत है । धन्यवाद, शमूएल!
लीन

18

मैं परिस्थितियों जहां एक बदलने की आवश्यकता के बारे में यकीन नहीं है 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इसे परिवर्तित किए बिना उपयोग कर सकते हैं ।


2
यहां NSUinteger को एक int: value Comparison में बदलना चाहते हैं। (int i = -1)> (NSUinteger j = 14) int को अहस्ताक्षरित में बदल देता है, जिसका अर्थ है -1> 14, जो आप नहीं चाहते।
शमूएल क्ले

1
@SamuelClay। एक अच्छा बिंदु जब विशिष्ट मामलों में उपयोग किया जाता है। व्यक्तिगत रूप से, मैं एक NSUInteger को एक यूआईएनटी में परिवर्तित करूंगा। तथापि। प्रश्न एनएसयूइंटर को परिवर्तित करने के बारे में था, न कि एनएसयूइंटर को।
अबिज़र्न

मैंने केवल एक सामान्य ख़राब चित्रण के लिए एक अहस्ताक्षरित int का उपयोग किया। यह दोनों के लिए एक ही प्रकार की कास्ट है, जैसा कि मेरा उत्तर दर्शाता है। यह एक कठिन समस्या नहीं है, लेकिन यह काफी सामान्य है और मुझे अभी तक किसी को भी एक-लाइन जवाब देने की सलाह नहीं दी गई है।
सैमुएल क्ले

0

UIsegmentedControl में सामान्य रूप से उपयोग किया जाता है, "त्रुटि" तब दिखाई देती है जब 32 बिट्स के बजाय 64 बिट्स में संकलित किया जाता है, एक नए चर के लिए इसे पास नहीं करने का आसान तरीका इस युक्तियों का उपयोग करना है, जोड़ना (int) :

[_monChiffre setUnite:(int)[_valUnites selectedSegmentIndex]];

के बजाय :

[_monChiffre setUnite:[_valUnites selectedSegmentIndex]];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.