2009-11-09 14 views
7

करने के लिए एक नई पंक्ति संलग्न मैं इस है:एक NSString

if (soapResults != nil) { 
    soapResults = [soapResults stringByAppendingString:@"\n"]; 
    } 

लेकिन मैं एक चेतावनी मिलती है: निर्माण पर अलग ऑब्जेक्टिव-सी प्रकार से

असाइनमेंट।

जब मैं डिवाइस पर इसे चलाने मैं:

Program received signal: "EXC_BAD_ACCESS". 
gdb से

कोई विचार बिना किसी चेतावनी या त्रुटि के एनएसएसटींग में एक नई लाइन को कैसे जोड़ना है?

किसी भी मदद की सराहना की // :)

+0

soapResults के प्रकार क्या है और जहां यह घोषित किया जाता है? – Chuck

+0

एनएसएसटींग, .h – Spanky

+0

में आपको वह चेतावनी मिलती है क्योंकि आप एनएसएसटींग ऑब्जेक्ट को बदलने का प्रयास करते हैं, आप नहीं कर सकते !, NSMutableString में इसके बजाय उपयोग करने का प्रयास करें। – evya

उत्तर

16

एक वैकल्पिक है: [NSString stringWithFormat: @"%@\n", soapResults] भले ही तर्क एक ही है!

हालांकि, stringByAppendingString के मामले में भी, यह एक नई स्ट्रिंग देता है लेकिन यह लक्ष्य नहीं बदलता है, इसलिए आपको कक्षा एनएसएसटींग के नए उदाहरण को नई स्ट्रिंग असाइन करना होगा।

+0

यह काम किया, धन्यवाद // :) – Spanky

+6

प्रारूप स्ट्रिंग का उपयोग न करें जब तक आपको वास्तव में आवश्यकता न हो। जब आप बस -brringByAppendingString का उपयोग कर सकते हैं तो उन्हें पार्स करना महंगा होता है: – NSResponder

0

आपके पास मेमोरी प्रबंधन के मुद्दे होने की संभावना है, तो साबुन शायद एक ऑब्जेक्ट के लिए एक भटक सूचक है जिसे हटा दिया गया है। अधिक कोड देखने के बिना कहना मुश्किल है, लेकिन यह जांच कर रहा है कि वस्तु को मूल रूप से आवंटित किया गया है, यह एक अच्छी शुरुआत है।

उदाहरण के लिए यदि इसे एक [एनएसएसटींग स्ट्रिंग विथ ...] कॉल के माध्यम से आवंटित किया गया है तो इसे डिफ़ॉल्ट रूप से स्वत: बंद कर दिया गया है, यानी इसे रन लूप के अंत में रिलीज़ किया जाएगा और यदि आप चाहें तो इसे बनाए रखना होगा उसे पकड़ कर रखें।

1

ऑब्जेक्ट जो आप वापस प्राप्त करते हैं -स्ट्रिंगबैपेंडिंगस्ट्रिंग: ऑटोरेलेज्ड है। यदि आप इसे जारी रखना चाहते हैं तो आपको इसे बनाए रखना होगा। यदि आप इसे बनाए नहीं रखते हैं, तो अगली बार जब आप इसे एक्सेस करने का प्रयास करेंगे तो आपको एक मेमोरी अपवाद मिलेगा।

यह सुनिश्चित करने का एक आसान तरीका है कि संपत्ति के रूप में "साबुन परिणाम" घोषित करें और इसके लिए एक्सेसर्स को संश्लेषित करें।

0

आप आगे स्लैश का उपयोग कर रहे हैं, इसका मतलब है कि यह एन को अनदेखा कर देगा, इसलिए मूल रूप से आप कुछ भी नहीं जोड़ रहे हैं। मुझे विश्वास है कि एक समस्या

2

आप इस कोशिश कर सकते हैं हो सकता है, यह मेरे लिए काम करता है:

NSString *content1 = [messageObject valueForKey:@"content"]; 
NSString *seprator = @"\n----------------------\n"; 
NSString *myString = [NSString stringWithFormat:@"%@\n%@\n",seprator,content1]; 
content = [content stringByAppendingString:myString]; 

`

2

मैं \ r से \ N जब NSStrings का उपयोग कर बेहतर काम करता है पाया है।

तो:

NSString *stringWithNewLine = [soapResults stringByAppendingString:@"\r"];