मैं एक उद्देश्य सी कक्षा में एक विधि को ओवरराइड करना चाहता हूं जिसके पास मेरा स्रोत नहीं है।एक उद्देश्य सी श्रेणी में सुपर का उपयोग कर?
मैंने इसे देखा है, और ऐसा लगता है कि श्रेणियों को मुझे ऐसा करने की अनुमति देनी चाहिए, लेकिन पुराने तरीकों के परिणाम प्राप्त करने के लिए सुपर का उपयोग करके, मैं अपनी नई विधि में पुरानी विधि के परिणाम का उपयोग करना चाहता हूं।
जब भी मैं इसे आजमाता हूं, मेरी विधि को बुलाया जाता है, लेकिन "सुपर" शून्य है ... कोई विचार क्यों? मैं एक्सकोड 2.2 एसडीके के साथ आईफोन विकास कर रहा हूं। मैं निश्चित रूप से एक वर्ग के उदाहरण के साथ काम कर रहा हूं, और कक्षा की विधि एक उदाहरण विधि है।
@implementation SampleClass (filePathResolver)
-(NSString*) fullPathFromRelativePath:(NSString*) relPath
{
NSString *result = [super fullPathFromRelativePath: relPath];
... do some stuff with the old result
return result;
}
नोट और स्पष्टीकरण: मैं ऐप्पल डॉक्स में जो देख सकता हूं, उससे मुझे लगता है कि इसकी अनुमति दी जानी चाहिए?
Categories docs at developer.apple.com: एक वर्ग एक विरासत विधि को ओवरराइड करता है, श्रेणी में विधि, हमेशा की तरह, विरासत में मिला कार्यान्वयन संदेश सुपर करने के लिए के माध्यम से आह्वान कर सकते हैं। हालांकि, यदि कोई श्रेणी श्रेणी की कक्षा में मौजूद पहले से मौजूद एक विधि को ओवरराइड करता है, तो मूल कार्यान्वयन को आमंत्रित करने का कोई तरीका नहीं है।
आप कभी भी इस के लिए एक समाधान मिला? मैं पाठ पैरामीटर को संशोधित करने की कोशिश कर रहा हूं क्योंकि इसे UILabel के सेटटेक्स्ट: विधि में पारित किया गया है। मैं UILabel (विशाल कोडबेस) को उपclass नहीं करना चाहता, इसलिए एक श्रेणी सबसे अधिक उपयुक्त है। मुझे भी लगता है कि सुपर सेट टेक्स्ट को कॉल करना चाल होगा, अगर सुपर ऑब्जेक्ट वास्तव में यूआईएलएबल था, लेकिन फिर, यह संभवतः श्रेणी में परिभाषित एक अनंत लूप कॉलिंग सेटटेक्स्ट की ओर ले जाएगा। तो यह स्पष्ट है कि यह शायद एक श्रेणी के लिए एक असंभव काम है। –
हे! इस पृष्ठ पर जो पोस्ट किया गया है उससे मुझे कोई अन्य समाधान नहीं मिला। विधि स्विजलिंग, या किसी श्रेणी में एक अलग विधि का उपयोग करें ;-( –