2009-07-21 13 views
16

संभव डुप्लिकेट:
How do I concatenate strings in Objective-C?उद्देश्य-सी (आईफोन) में स्ट्रिंग को कैसे संयोजित करें?

सबसे पहले, मंच iPhone और label.text लेबल दिखाया गया बदल जाता है। इस परिदृश्य पर विचार करें:

मेरे पास पूर्णांक की एक सरणी है। और मैं इसे स्क्रीन पर प्रदर्शित करना चाहता हूं।

यहाँ उस पर मेरी ले रहा है:

-(IBAction) updateText: (id)sender { 
    int a[2]; 
    a[0]=1; 
    a[1]=2; 
    a[2]=3; 
    for (int i=0; i<=10;i++) 
    label.text = [NSString stringByAppendingString: [NSString stringWithFormat: @"%i", a[i]]]; 
} 

आप शायद देख सकते हैं, मैं बहुत उलझन में हूँ। Pls कृपया मेरी मदद करो बाहर :(

+0

थोड़ा देर हो चुकी है लेकिन आप आकार 2 के साथ अपनी सरणी शुरू करते हैं तो उच्चतम सूचकांक 1 होगा, लेकिन आप एक [2] = 3 कर रहे हैं; जो बाध्य त्रुटि से बाहर होगा। – Jonny

उत्तर

35

इस प्रयास करें:

NSMutableString* theString = [NSMutableString string]; 
for (int i=0; i<=10;i++){ 
    [theString appendString:[NSString stringWithFormat:@"%i ",i]]; 
} 
label.text = theString; 
+0

यह केवल एनएसएमयूटेबलस्ट्रिंग में संभव है, है ना? मैं इन सभी अलग-अलग वर्गों और उनके तरीकों से उलझन में हूं ... लेकिन, थक्स मैन। यह वही है जो मुझे चाहिए। :) – r0ach

+0

एपेंडस्ट्रिंग: केवल एनएसएमयूटेबलस्ट्रिंग में है, लेकिन एक समान फ़ंक्शन स्ट्रिंगबैपेंडिंग स्ट्रिंग है: एनएसएसटींग पर। –

+1

@ टॉमडलिंग: मैंने एक ही दृष्टिकोण का उपयोग किया है, लेकिन 'theString' को .h फ़ाइल में घोषित किया गया है, जिसके बाद प्रतिनिधि को प्रदर्शन करना है, कई बार बुलाया जाता है। अब, इस मामले में मुझे एक खाली 'द स्ट्रिंग' मिल रहा है। कोई फिक्स? –

3

एक अन्य विधि NSMutableString का उपयोग किए बिना:

-(IBAction) updateText: (id)sender { 
    int a[3]; 
    a[0]=1; 
    a[1]=2; 
    a[2]=3; 
    NSString *str = @""; 
    for (int i=0; i<3;i++) 
     str = [str stringByAppendingFormat:@"%i ",i]; 
    label.text = str; 
} 
:

NSString* theString = @""; 
for (int i=0; i<=10;i++){ 
    theString = [theString stringByAppendingFormat:@"%i ",i]; 
} 
label.text = theString; 

यहाँ एक पूर्ण कार्यान्वयन (अपने पर्वतमाला को सही) है

आप इसे ऐसा भी कर सकते हैं (उदाहरण के लिए यदि आप अल्पविराम से अलग सूची चाहते थे):

-(IBAction) updateText: (id)sender { 
    int a[3]; 
    a[0]=1; 
    a[1]=2; 
    a[2]=3; 
    NSMutableArray *arr = [NSMutableArray arrayWithCapacity:3]; 
    for (int i=0; i<3;i++) 
     [arr addObject:[NSString stringWithFormat:@"%i",i]]; 

    label.text = [arr componentsJoinedByString:@", "]; 
} 
+1

जबकि मेरे में LISP प्रोग्रामर एनएसएमयूटेबल स्टिंग पर एनएसएसटींग दृष्टिकोण पसंद करता है, आपको वास्तव में अपने पहले समाधान के स्मृति प्रभाव से सावधान रहना होगा। इस तरह के एक छोटे से पाश के लिए, यह एक बड़ा सौदा नहीं है, लेकिन यह स्मृति में ओ (एन^2) है और आईफोन पर समस्याएं पैदा कर सकती है जहां एक अल्पकालिक स्मृति स्पाइक भी एक मुद्दा है। –

+0

बहुत सच है। इस कारण से सरणी विधि बहुत बेहतर है। (अगर मैंने [एनएसएमयूटेबलएरे ऐलोक] और [एआर रिलीज] किया था तो बेहतर होगा ...) यह सूची में शुरुआत या समाप्ति से कॉमा या स्पेस को खोने के बारे में चिंता किए बिना जुड़ने वाली स्ट्रिंग में अतिरिक्त लचीलापन भी देता है। – Benjie

17

चूंकि आप लूप का उपयोग कर रहे हैं, तो टॉम और बेंज़ी दोनों के समाधानों के साथ कुछ सावधान रहें। वे प्रत्येक प्रति पुनरावृत्ति के लिए एक अतिरिक्त autoreleased वस्तु बनाते हैं। एक छोटे से पाश के लिए, यह ठीक है, लेकिन यदि लूप का आकार असंबद्ध है या यदि तार बड़े हैं, तो इससे बहुत बड़ी मेमोरी स्पाइक और प्रदर्शन हिट हो सकती है। विशेष रूप से आईफोन पर, यह वास्तव में लूप की तरह है जो अल्पकालिक स्मृति स्पाइक के कारण आश्चर्यजनक स्मृति समस्याओं का कारण बन सकता है।

निम्नलिखित समाधान में एक छोटी मेमोरी पदचिह्न है (यह थोड़ा तेज है और कम टाइपिंग लेता है)। के बजाय -appendFormat: पर कॉल पर ध्यान दें। यह एक दूसरी स्ट्रिंग बनाने से बचाता है जिसे फेंक दिया जाएगा। याद रखें कि अंतिम स्ट्रिंग के अंत में एक अतिरिक्त स्थान है जिसे आप छुटकारा पाने के लिए चाहते हैं। आप या तो पहले या आखिरी पुनरावृत्ति को अलग-अलग या लूप के बाद अंतिम स्थान को ट्रिम करके ठीक कर सकते हैं।

NSMutableString* theString = [NSMutableString string]; 
for (int i=0; i<=10;i++){ 
    [theString appendFormat:@"%i ",i]; 
} 
label.text = theString; 

[NSArray componentsJoinedByString:] को न भूलें। इस मामले में आपके पास एनएसएआरएआरई नहीं है, लेकिन आम मामलों में जहां आप करते हैं, यह संभवतः आप जो खोज रहे हैं उसे प्राप्त करने का सबसे अच्छा तरीका है।

7
//NSArray *chunks 
string = [chunks componentsJoinedByString: @","]; 
संबंधित मुद्दे