2011-03-01 13 views
21

आप NSUInteger को NSString में कैसे परिवर्तित करते हैं? मैंने कोशिश की है लेकिन मेरे NSString हर समय 0 लौटा।आप एनएसयूइंटर को एनएसएसटींग में कैसे परिवर्तित करते हैं?

NSUInteger NamesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count]; 
NSLog(@"--- %d", NamesCategoriesNSArrayCount); 
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 
NSLog(@"=== %d", NamesCategoriesNSArrayCountString); 

उत्तर

7

मुझे आशा है कि अपने NamesCategoriesNSArrayCountStringNSString है; यदि हां कोड की निम्न पंक्ति का उपयोग करें।

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger]; 
+0

एक्सकोड 4.5 के रूप में, यह एक "डेटा तर्क तर्क प्रारूप द्वारा उपयोग नहीं किया गया" चेतावनी देगा। क्या कोई सही प्रारूप जानता है? – GeneralMike

+0

अंतिम को रद्द करें।मेरे पास एक टाइपो था जिसे मैंने सबसे लंबे समय तक नहीं देखा था, और टाइपो त्रुटि का कारण बन रहा था। '[एनएसएसटींग स्ट्रिंगविथफॉर्मैट: @"% डी ", myNSUInteger] 'अभी भी ऐसा करने का सही तरीका है। – GeneralMike

+1

@ एंड्रियास-ली द्वारा उत्तर अधिक सटीक है। * '% d'' * हस्ताक्षरित * पूर्णांक के लिए प्रारूप स्ट्रिंग है। NSUInteger एक * हस्ताक्षरित लंबा * पूर्णांक है। एक बार हस्ताक्षर किए गए और हस्ताक्षरित सीमा के बीच ओवरलैप होने के बाद ''% lu'' का उपयोग करना आवश्यक है, अन्यथा नकारात्मक मान मुद्रित किया जाएगा जब वास्तव में संख्या सकारात्मक होगी। – Ben

32

जब arm64 लिए समर्थन के साथ संकलन, यह एक चेतावनी उत्पन्न नहीं करेगा:

[NSString stringWithFormat:@"%tu", myNSUInteger]; 

या, आपके मामले में:

NSUInteger namesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count]; 
NSLog(@"--- %tu", namesCategoriesNSArrayCount); 
[namesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%tu", namesCategoriesNSArrayCount]]; 
NSLog(@"=== %@", namesCategoriesNSArrayCountString); 

(इसके अलावा, टिप: चर लोअरकेस के साथ शुरू करते हैं। जानकारी: here)

+7

या 'NSUInteger' के लिए'% zd', टाइपकास्टिंग के बिना। –

+1

@PaulPeelen क्या आप 'NSInteger' कहना चाहते थे? –

+1

मेरा बुरा .. मेरा मतलब था, निश्चित रूप से, '% tu' (इसके हस्ताक्षर के बाद से)। –

4

जब arm64 के लिए संकलन, चेतावनी से बचने के लिए निम्नलिखित का उपयोग करें:

NamesCategoriesNSArrayCountString = [NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 

के istead

[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 
+1

ध्यान दें कि 'tu' अभी काम करता है, लेकिन इसकी गारंटी नहीं है। यहां देखें: http://stackoverflow.com/questions/18893880/alternatives-to-type-casting-when-formatting-nsuinteger-on-32-and-64-bit-archi –

+0

बहुत सच है। मैं वास्तव में नहीं जानता था। भविष्य के लिए ध्यान में रखना अच्छा है। –

5

तुम भी उपयोग कर सकते हैं:

NSString *rowString = [NSString stringWithFormat: @"%@", @(row)]; 

जहां पंक्ति एक NSUInteger है।

0

एप्पल से इस String Format Specifiers लेख विशिष्ट जब आप एप्पल प्रकार प्रारूप में तैयार करना है:

ओएस एक्स कई डेटा प्रकार-NSInteger, NSUInteger, CGFloat, और का उपयोग करता है में मूल्यों का प्रतिनिधित्व करने के लिए एक सुसंगत साधन उपलब्ध कराते हैं CFIndex करने 32- और 64-बिट वातावरण। 32-बिट वातावरण में, एनएसआईएनटेगर और एनएसयूइंटर को क्रमशः int और unsigned int के रूप में परिभाषित किया जाता है। 64-बिट वातावरण में, एनएसआईएनटेगर और एनएसयूइंटर को क्रमशः लंबे और हस्ताक्षरित लंबे समय तक परिभाषित किया जाता है। प्लेटफ़ॉर्म के आधार पर अलग-अलग printf-style प्रकार विनिर्देशों का उपयोग करने की आवश्यकता से बचने के लिए, आप तालिका 3 में दिखाए गए विनिर्देशों का उपयोग कर सकते हैं। ध्यान दें कि कुछ मामलों में आपको मूल्य डालना पड़ सकता है।

  • [NSString stringWithFormat:@"%ld", (long)value]: NSInteger दशमलव
  • [NSString stringWithFormat:@"%lx", (long)value] के रूप में प्रदर्शित: NSInteger हेक्स
  • [NSString stringWithFormat:@"%lu", (unsigned long)value] के रूप में प्रदर्शित: NSUInteger दशमलव
  • [NSString stringWithFormat:@"%lx", (unsigned long)value] के रूप में प्रदर्शित: NSUInteger
  • [NSString stringWithFormat:@"%f", value] हेक्स के रूप में प्रदर्शित: CGFloat
  • [NSString stringWithFormat:@"%ld", (long)value]: सीएफआईएनएक्सएक्स डी के रूप में प्रदर्शित किया गया ecimal
  • [NSString stringWithFormat:@"%lx", (long)value]: CFIndex हेक्स

के रूप में प्रदर्शित अधिक जानकारी के लिए लेख देखें।

संबंधित मुद्दे