परिदृश्य
मैं एक स्थिति है जहाँ एक आधार वर्ग AbstractRequest
बुलाया प्रकार id <AbstractRequestDelegate>
हेडर फाइल में घोषित की एक प्रतिनिधि संपत्ति है है:अधिक विशिष्ट प्रकार के साथ एक सुपरक्लास संपत्ति को ओवरराइड कैसे करें?
@property (nonatomic, assign) id <AbstractRequestDelegate> delegate;
सार प्रतिनिधि प्रोटोकॉल में कुछ आवश्यक तरीकों शामिल है, और के रूप में 'अमूर्त' शब्द से संकेत मिलता है, AbstractRequest
और AbstractRequestDelegate
दोनों उप-वर्ग/विस्तारित होने का इरादा रखते हैं।
इसका एक उदाहरण उपclass ConcreteRequest और विस्तारित प्रोटोकॉल ConcreteRequestDelegates होगा, जो दोनों अमूर्त लोगों को अतिरिक्त विधियां जोड़ते हैं। इरादा यह है कि सार और ठोस वर्ग दोनों विधियां एकल निर्दिष्ट प्रतिनिधि उदाहरण को संदेश भेज सकती हैं।
समय पर एक निश्चित बिंदु पर ConcreteRequest ConcreteRequestDelegate द्वारा परिभाषित प्रतिनिधि पर एक विधि को कॉल करना चाहता है। चूंकि प्रतिनिधि का प्रकार आईडी है, इसलिए संकलक चेतावनी देगा कि यह विधि लागू नहीं की जा सकती है।
ConcreteRequest.m: 38: चेतावनी: - @synthesize, @dynamic का उपयोग करें या एक विधि कार्यान्वयन
प्रदान संपत्ति 'प्रतिनिधि' से परिभाषित करने की विधि '-delegate' की आवश्यकता है समस्या
यह चेतावनी उचित है, क्योंकि संपत्ति id <AbstractRequestDelegate>
पर टाइप की गई है। इसे ठीक करने के लिए, मैं संकलक को स्पष्ट करना चाहता हूं कि कंक्रीट उदाहरण को सौंपा गया प्रतिनिधि id <ConcreteRequestDelegate>
प्रकार का होना चाहिए। यह मेरे लिए पूरी तरह से उचित लग रहा था, इसलिए मैं ConcreteRequest शीर्षक में एक नया संपत्ति में डाल दिया, सार एक ओवरराइड करने के लिए उम्मीद कर रहा:
@property (nonatomic, assign) id <ConcreteRequestDelegate> delegate;
लेकिन इस जहां संकलक, मेरे साथ सहमत नहीं हैं शायद अच्छे कारण के साथ है। मैंने सोचा होगा कि यह गलत वर्ग के साथ एक सुपर क्लास 'संपत्ति को ओवरराइड करने के लिए चेतावनी देगा, लेकिन इसके बजाय यह मुझे इस नई संपत्ति को फिर से संश्लेषित करने की मांग करता है। मैं वहां जाना नहीं चाहता, क्योंकि तब सुपर क्लास के तरीकों के पास एक ही प्रतिनिधि संपत्ति तक पहुंच नहीं होगी।
प्रश्न एक तरह से
वहाँ है करने के लिए 'फिर से घोषित' जोड़ा प्रकार की जानकारी के साथ ठोस उपवर्ग में संपत्ति? या क्या आप मेरी सोच में त्रुटि को खोज सकते हैं, शायद यह एक आम समस्या है जिसे मैं अब तक नहीं आया हूं?
चीयर्स,
ईपी।
पीएस इस काम में दिखाई देने वाले सभी वर्ग और प्रोटोकॉल नाम कल्पित हैं। वास्तविक वर्ग और प्रोटोकॉल नाम, ओपन सोर्स या पेटेंट के लिए कोई समानता पूरी तरह से संयोग है।
पीएस पर एलओएल : डी ... क्या आप सभी इंटरफ़ेस और कक्षाओं के लिए कोड पोस्ट कर सकते हैं ... आप स्पष्टीकरण बहुत लंबा है –
यह पहले से ही मुझे आधा घंटे खर्च करता है, शायद कोई और कई शब्दों के माध्यम से देख सकता है। यदि सभी विफल हो जाते हैं, तो मैं इन वर्गों को छद्म कोड के लिए समय निवेश करूंगा। – epologee
: डी आप क्यों संश्लेषित कर रहे हैं एक समस्या पैदा करेगा –