2008-12-21 14 views
61

मैं लेबल की टेक्स्ट प्रॉपर्टी पर संख्यात्मक मान सेट करने के लिए stringWithFormat का उपयोग करने का प्रयास कर रहा हूं लेकिन निम्न कोड काम नहीं कर रहा है। मैं एनएसएसटींग को int नहीं डाल सकता। मैं उम्मीद कर रहा था कि विधि यह जानती है कि एक int को एनएसएसटींग में स्वचालित रूप से कैसे परिवर्तित किया जाए।मुझे स्ट्रिंग WithFormat में int को कैसे पास करना चाहिए?

मुझे यहां क्या करने की ज़रूरत है?

- (IBAction) increment: (id) sender 
{ 
    int count = 1; 
    label.text = [NSString stringWithFormat:@"%@", count]; 
} 

उत्तर

122

यह करें:

label.text = [NSString stringWithFormat:@"%d", count]; 
+8

यह एक का उत्पादन 64-बिट उपकरणों के लिए संकलन करते समय चेतावनी, जहां 'int' वास्तव में' लंबा 'है। – devios1

24

आप पूर्णांकों के लिए %d या %i उपयोग करना चाहते हैं। %@ वस्तुओं के लिए प्रयोग किया जाता है।

यह ध्यान देने योग्य है कि, निम्नलिखित कोड एक ही कार्य पूरा करेगा और यह बहुत स्पष्ट है।

label.intValue = count; 
45

ध्यान रखें कि @ "% d" केवल 32 बिट पर काम करेगा। एक बार जब आप 64 बिट प्लेटफ़ॉर्म के लिए संकलित करते हैं तो संगतता के लिए एनएसआईएनटेगर का उपयोग शुरू करने के बाद, आपको अपने प्रारूप विनिर्देशक के रूप में @ "% ld" का उपयोग करना चाहिए।

+1

32-बिट डिवाइस के लिए संकलन करते समय '% ld' का उपयोग करके अब एक चेतावनी उत्पन्न होती है। किस तरह से सुरक्षित है? 32 बिट्स के साथ '% ld' का उपयोग करना या 64% के साथ'% d' का उपयोग करना? – devios1

+1

मुझे लगता है कि मैं पहले 'लांग' पर कास्टिंग के बारे में स्क्वार्टर्ट के नोट को देखता हूं। यह चाल है और अब चेतावनी के बिना लक्ष्य के लिए संकलित करता है! – devios1

13

और हास्य मूल्य के लिए:

label.text = [NSString stringWithFormat:@"%@", [NSNumber numberWithInt:count]]; 

+3

या आधुनिक उद्देश्य-सी वाक्यविन्यास का उपयोग करें और उपयोग करें: [एनएसएसटींग स्ट्रिंगविथफॉर्मैट: @ "% @", @ (गिनती)] –

37

मार्क Charbonneau लिखा था (हालांकि यह अगर एक दिन आप NSNumber के साथ काम कर रहे उपयोगी हो सकता है):

ध्यान रखें कि @ "% d" केवल 32 बिट पर काम करेगा। एक बार जब आप 64 बिट प्लेटफ़ॉर्म के लिए संकलित करते हैं तो संगतता के लिए एनएसआईएनटेगर का उपयोग शुरू करने के बाद, आपको अपने प्रारूप विनिर्देशक के रूप में @ "% ld" का उपयोग करना चाहिए।

दिलचस्प, टिप के लिए धन्यवाद, मैं अपने NSInteger एस के साथ @ "% d" का उपयोग कर रहा था!

NSInteger i = 42; 
label.text = [NSString stringWithFormat:@"%ld", (long)i]; 

स्रोत:: String Programming Guide for Cocoa - String Format Specifiers (आवश्यक है iPhone डेवलपर पंजीकरण)

1

SDK दस्तावेज़ भी इस मामले में long को NSInteger कास्ट करने के लिए (@ "% ld" मैच के लिए), उदाहरण के लिए सिफारिश की गई है क्या स्निपेट आपने यह दिखाने के लिए सिर्फ एक नमूना पोस्ट किया है कि आप क्या करने की कोशिश कर रहे हैं?

कारण मैं पूछता हूं कि आपने एक विधि increment नाम दिया है, लेकिन आप मान को बढ़ाने के बजाय टेक्स्ट लेबल के मान को सेट करने के लिए इसका उपयोग कर रहे हैं।

यदि आप कुछ और जटिल करने की कोशिश कर रहे हैं - जैसे एक पूर्णांक मान सेट करना और लेबल को यह मान प्रदर्शित करना, तो आप बाइंडिंग का उपयोग करने पर विचार कर सकते हैं। उदाहरण के लिए:

तो आप प्रॉपर्टी count घोषित करने और अपने increment कार्रवाई जो कुछ भी करने के लिए इस मूल्य सेट, और उसके बाद आईबी में, आप count के मूल्य के लेबल के पाठ बाँध। जब तक आप count के साथ कुंजी मूल्य कोडिंग (केवीसी) का पालन करते हैं, तो आपको लेबल के प्रदर्शन को अपडेट करने के लिए कोई भी कोड लिखना नहीं है। और एक डिजाइन परिप्रेक्ष्य से आपको कमजोर युग्मन मिल गया है।

1

long long int के लिए मत भूलना:

long long int id = [obj.id longLongValue]; 
[NSString stringWithFormat:@"this is my id: %lld", id] 
0
label.text = [NSString stringWithFormat:@"%d", XYZ]; 

//result: label.text = XYZ 
//use %d for int values 
4

32-बिट और 64-बिट सुरक्षित होने के लिए, Boxed Expressions में से एक का उपयोग करें:

label.text = [NSString stringWithFormat:@"%@", @(count).stringValue]; 
0
NSString * formattedname; 
NSString * firstname; 
NSString * middlename; 
NSString * lastname; 

firstname = @"My First Name"; 
middlename = @"My Middle Name"; 
lastname = @"My Last Name"; 

formattedname = [NSString stringWithFormat:@"My Full Name: %@ %@ %@", firstname, middlename, lastname]; 
NSLog(@"\n\nHere is the Formatted Name:\n%@\n\n", formattedname); 

/* 
Result: 
Here is the Formatted Name: 
My Full Name: My First Name My Middle Name My Last Name 
*/ 
संबंधित मुद्दे

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