2011-12-22 20 views
6

मेरे पास एक सुलभ विधि वाला एक वर्ग है जो कॉल किए जाने पर NSString वापस भेजता है।यदि दो एनएसएसटींग ऑब्जेक्ट्स की तुलना करते समय "ए == बी" झूठा है

myString = cell.textLabel.text; 

जब मैं उस विधि को फोन करके स्ट्रिंग को पुनः प्राप्त, मैं इसे में एक और स्ट्रिंग के लिए आवंटित:

[MyClass getMyString] 

कि कक्षा में स्ट्रिंग चर वास्तव में एक तालिका के didSelectRowAtIndexPath: हिस्सा इस तरह में असाइन किया गया है वर्ग है कि यह कहा जाता है और एक स्ट्रिंग मैं

NSString *mySecondString; 
mySecondString = @"my value"; 

if(mySecondString == myString){ 
    i = 9; 
} 

मैं कोड और हर बार यह अगर बयान का मूल्यांकन करता है के माध्यम से कदम रखा है परिभाषित किया है की तुलना में, यह है i=9 से ठीक पहले kips और अगले else if कथन पर जाता है। यह क्यों होगा? वे एक ही मूल्य के रूप में मूल्यांकन क्यों नहीं करते? यदि आप डिबगिंग के दौरान प्रत्येक कर्सर पर अपने कर्सर को घुमाते हैं तो वे दिखाएंगे कि उनके पास एक ही वैल्यू है, लेकिन कुछ कारणों के लिए कोड ऐसा नहीं है जैसा कि मैं उम्मीद करता हूं और 9i पर असाइन करता हूं।

कोई विचार?

+0

मुझे आश्चर्य है कि इस साइट पर एक खोज ने कोई परिणाम नहीं लाया। इस प्रश्न से पूछा गया है और अतीत में कई बार जवाब दिया गया है। – dreamlax

+0

शायद मैंने यह पूछने से पहले सही तरीके से नहीं पूछा था ... - मैंने सीएफस्ट्रिंग के साथ निपटाए गए बहुत सारे प्रश्न देखे और इसे एनएसएसटींग को सौंप दिया, लेकिन यह नहीं देखा कि केविन बल्लार्ड ने तुरंत क्या जवाब दिया था। धन्यवाद! – MeisterPlans

+0

संभावित डुप्लिकेट [एनएसएसटींग तुलना को समझना] (http://stackoverflow.com/questions/3703554/understanding-nsstring-comparison) –

उत्तर

17

आप मानते हैं कि सी == ऑपरेटर स्ट्रिंग समानता करता है। यह नहीं है यह पॉइंटर समानता (जब पॉइंटर्स पर बुलाया जाता है) करता है। दो NSString तुलना करने के लिए

if ([mySecondString isEqualToString:myString]) { 
    i = 9; 
} 
+0

हाँ !!! धन्यवाद!! वह मुद्दा बिल्कुल था! – MeisterPlans

2

आप उपयोग नहीं कर सकते '==': आप एक असली स्ट्रिंग समानता परीक्षण करना चाहते हैं तो आप (जब आप जानते हैं दोनों वस्तुओं तार कर रहे हैं या विशेषज्ञता -isEqualToString:) -isEqual: विधि का उपयोग करने की आवश्यकता है तार करने के लिए दो स्ट्रिंग

3

आप तुलना कर रहे हैं संकेत तुलना करने के लिए है, न कि तार खुद से:

आप [(NSString *) NSString isEqualToString] उपयोग करने के लिए करना चाहिए। आपको अपना कोड

if (if([mySecondString isEqualToString:myString]) { 
    .... 
} 
1

आप दो स्ट्रिंग की तुलना नहीं कर सकते हैं "==" यह int और अन्य मानों के लिए है। आप की तुलना दो स्ट्रिंग

अगर ([Firststring isEqualToString: Secondstring]) के लिए नीचे दिए गए कोड का उपयोग कर सकते {

NSLog(@"Hello this both string is same "); 

}

1

यह सूचक का एक मूल अवधारणा है, तो आप याद कर रहे हैं। (हाँ, myString और mySecondString स्ट्रिंग के पॉइंटर्स हैं)।

अब, if(mySecondString == myString) केवल TRUE पर जायेंगे, यदि दोनों पॉइंटर्स एक ही स्थान पर इंगित कर रहे हैं। (जो वे ज्यादातर मामलों में नहीं करेंगे)

आपको if ([mySecondString isEqualToString:myString]) करना चाहिए, जो समानता के लिए आपकी दोनों स्ट्रिंग की सामग्री की तुलना करेगा।