ठीक है, वहाँ कुछ समस्याओं यहाँ हैं।
पहला (और जिसे आपने पूछा था) यह नहीं है कि आप एक नया एनएसएमयूटेबल स्ट्रिंग आवंटित कर रहे हैं और फिर इसे दूसरी पंक्ति में फेंक देते हैं जब आप इसे कुछTextFieldIbOutlet.text पर सेट करते हैं। इसके अलावा, आप एक म्यूटेबल करने के लिए एक गैर-परिवर्तनीय स्ट्रिंग कास्टिंग कर रहे हैं जो वास्तव में काम नहीं करेगा। इसके बजाय, इस तरह पहले दो लाइनों गठबंधन:
NSMutableString* mStr = [NSMutableString stringWithString:someTextFieldIbOutlet.text];
वास्तविक त्रुटि है कि आप हो रही है के कारण होता है क्योंकि NSLog के लिए पहला तर्क "प्रारूप" स्ट्रिंग जो NSLog बताता है कि कैसे आप स्वरूपित करना चाहते हैं माना जाता है डेटा जो बाद के तर्कों में आता है। यह एक शाब्दिक स्ट्रिंग होना चाहिए (@"this is a literal string"
जैसा बनाया गया) ताकि इसका उपयोग आपके प्रोग्राम को इसमें बदलाव करके शोषण के लिए नहीं किया जा सके।
इसके बजाय, इस का उपयोग करें:
NSLog(@"%@", mStr);
इस मामले में, प्रारूप स्ट्रिंग @"%@"
जिसका अर्थ है "एक NSString
वस्तु %@
करने के लिए सेट बनाएँ" है। %@
का अर्थ है कि अगला तर्क एक ऑब्जेक्ट है, और ऑब्जेक्ट के विवरण के साथ %@
को प्रतिस्थापित करने के लिए (जो इस मामले में स्ट्रिंग का मान है)।
प्रारूप कीड़े उत्पन्न होती हैं क्योंकि सी का तर्क पारित होने वाले सम्मेलन प्रकार-सुरक्षित नहीं होते हैं। –