मेरे पास डेटाबेस मॉडल क्लास है जो NSObject
है। मेरे पास NSMutableArray
में इन ऑब्जेक्ट्स का एक सेट है। मैं एक मैच खोजने के लिए indexOfObject:
का उपयोग करता हूं। समस्या मॉडल ऑब्जेक्ट का मेमोरी एड्रेस चेंज है। इसलिए मैं मॉडल की पंक्ति आईडी वापस करने के लिए hash
विधि को ओवरराइड कर रहा हूं। हालांकि यह ठीक नहीं करता है। मुझे hash
विधि के मान की तुलना करने के लिए isEqual:
विधि को ओवरराइड करना होगा।NSObject isEqual क्या है: और हैश डिफ़ॉल्ट फ़ंक्शन?
isEqual:
विधि डिफ़ॉल्ट रूप से समानता निर्धारित करने के लिए क्या उपयोग करती है?
मुझे लगता है कि यह स्मृति पता का उपयोग करता है। isEqual:
दस्तावेज पढ़ने के बाद मैंने सोचा कि यह hash
विधि से मूल्य का उपयोग करता है। जाहिर है, ऐसा नहीं है क्योंकि उस मूल्य को ओवरराइड करने का मेरा प्रयास मेरी प्रारंभिक समस्या को हल नहीं करता है।
यहां कुछ सट्टा जवाब दिए गए हैं। क्या कोई वास्तविक दस्तावेज प्रदान कर सकता है कि डिफ़ॉल्ट है एक्वाल्स पते का उपयोग करता है> मैं सुझाव नहीं दे रहा हूं कि यह नहीं है, बस इसे घोड़े के मुंह से सुनना चाहूंगा। – DougW
@DougW मैंने इस पर आपकी भावनाओं को साझा किया, इसलिए मैंने एक आधिकारिक संदर्भ को ट्रैक किया और इसे स्वीकृत उत्तर में संपादित किया। –
आप NSObject प्रोटोकॉल के लिए दस्तावेज़ पढ़ रहे हैं, एनएसओब्जेक्ट क्लास नहीं। प्रोटोकॉल परिभाषित करता है कि विधियों को क्या करना चाहिए, कक्षा वास्तव में परिभाषित करने में विफल रहता है कि यह वास्तव में क्या करता है। समानता और हैश को ओवरराइड करना हमेशा सुरक्षित होता है कि आप उन्हें कैसे काम करना चाहते हैं। –