2012-12-11 18 views
13

के साथ काम कर रहा एक संपत्ति को परिभाषित किया है ...संपत्ति नहीं गेटर और सेटर

@property (nonatomic, strong) NSArray *eventTypes; 

मैं गेटर और सेटर ओवरराइड करना चाहते ...

मैं इस में लिखा है ...

- (void)setEventTypes:(NSArray *)eventTypes 
{ 
    _eventTypes = eventTypes; 

    //do some stuff here. 
} 

यह ठीक काम करता है, लेकिन जब मैं तो इस ऐड ...

- (NSArray*)eventTypes 
{ 
    //do some stuff here. 

    return _eventTypes; 
} 

फिर दोनों कार्य त्रुटियां दिखाते हैं और यह नहीं जानते कि _eventTypes क्या है।

यह वही तरीका है। यह एक समारोह के साथ काम करता है लेकिन जैसे ही मैं दूसरे जोड़ता हूं, यह दोनों में विफल रहता है।

क्या इसके लिए मुझे कुछ और करने की ज़रूरत है? अजीब लगता है कि यह दोनों एक बॉट के साथ काम नहीं करता है।

+3

क्या आपके पास अपनी कक्षा में '_eventTypes' परिभाषित है? साथ ही साथ संपत्ति को आपको हेडर फ़ाइल में चर घोषित करने की आवश्यकता होगी। इसके अलावा (और मैं इस पर 100% निश्चित नहीं हूं) आपको उस संपत्ति पर '@ सिंथेसाइज 'का उपयोग करने की आवश्यकता हो सकती है भले ही आप अपना खुद का गेटर और सेटर लिख रहे हों (इस तरह, आपका गेटर और सेटर संश्लेषित वाले लोगों को ओवरराइड करें)। – benwad

+3

'@ सिंथेसाइज इवेंट टाइप्स = _eventTypes; 'चाल – Alladinian

+1

करेगा, आपको अब Xcode 4.5 के रूप में' @ संश्लेषित 'गुणों की आवश्यकता नहीं है। ऐसा कहकर, मैंने '@ संश्लेषण 'जोड़ा और यह काम किया! अजीब! धन्यवाद – Fogmeister

उत्तर

20

में इस जोड़े हालांकि LLVM ऑटो समर्थन इवर (डिफ़ॉल्ट रूप से एक अंडरस्कोर लगाया जाता है) का संश्लेषण होगा, कि आप दोनों मनुष्य और सेटर तरीके को लागू आप करेंगे नहीं एक ऑटो-संश्लेषित ivar प्राप्त करें और यही कारण है कि आपको मैन्युअल रूप से @synthesize eventTypes = _eventTypes; होना चाहिए।

आप इस यहाँ के बारे में अधिक पढ़ सकते हैं: http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html

2

मामले में @implementation

@synthesize eventTypes = _eventTypes; 
+1

उत्तर के लिए धन्यवाद: डी – Fogmeister

+0

@Fogmeister :-) –

-8

यह एक का प्रयास करें:

- (void)setEventTypes:(NSArray *)eventTypes 
{ 
    self.eventTypes = eventTypes; 

    //do some stuff here. 
} 
- (NSArray*)eventTypes 
{ 
    //do some stuff here. 

    return self.eventTypes; 
} 
+0

यह अनंत लूप का कारण बनता है और इसका कभी भी उपयोग नहीं किया जाना चाहिए। – Logan

+0

@Logan जब तक कि आप अनंत लूपों को पसंद नहीं करते – codrut

1

आप अपनी संपत्ति @synthesize किया है। जब हम एक कस्टम गेटर्स और सेटर्स बनाना चाहते हैं, तो हम इसका उपयोग करते हैं, जैसे:

  • कस्टम गेटर और सेटर के साथ संपत्ति पढ़ें/लिखें;
  • कस्टम गेटर के साथ केवल पढ़ने के लिए संपत्ति;

अधिकार अपने @implementation मीटर फ़ाइल में के बाद, जोड़ें:

@synthesize propertyName = _propertyName; 

इस संकलक करने के लिए बताओ तुम्हें तरीकों 'प्राप्त' और उस विशिष्ट की 'सेट' का नियंत्रण प्राप्त करना चाहते हैं संपत्ति। तो उसके बाद सेट और प्राप्त करने के आपके कार्यान्वयन ठीक काम करेंगे।


अतिरिक्त स्पष्टीकरण:

self.anyString = @ "पाठ"; बिल्कुल समतुल्य [स्वयं सेटएनीस्ट्रिंग: @ "टेक्स्ट"] है; इनमें से दोनों विधि सेट को कॉल कर रहे हैं। यदि आप _anyString का उपयोग करते हैं तो आप सेट विधि के बिना सीधे संपत्ति तक पहुंच रहे हैं।

तो इसके कारण, यदि हम स्वयं को कॉल करते हैं।सेट विधि के अंदर संपत्ति हम एक अनंत लूप बनाएंगे। एक बार जब हम 'सेट' और 'get' विधियों को फिर से लिख रहे हैं तो हमें _स्वयं के बजाय उपयोग करना होगा।

+0

इस प्रश्न का उत्तर 4 साल पहले दिया गया था और आपका उत्तर स्वीकार्य उत्तर के समान ही है। – Fogmeister

+1

मैं यहां एक नए प्रश्न से आया था जो आपके साथ बहुत ही परिचित था। मैंने अभी देखा है कि लड़का एक लिंक डालता है। वैसे भी क्षमा करें अगर मैंने आपको परेशान किया है, तो अगर कोई लिंक नहीं देखता है और यहां थोड़ा सा स्पष्टीकरण पढ़ता है तो मैं अपना जवाब छोड़ दूंगा। आपके कमेंट के लिए धन्यवाद। –

+1

पर्याप्त मेला। :) – Fogmeister

संबंधित मुद्दे