2012-04-11 19 views
6

में किसी विधि को सही ढंग से कैसे हटाया जाए, मैंने अभी here के उत्तरों को देखा है लेकिन मदद नहीं की है। जब मैं संकलक की तुलना में विधि घोषणा के लिए केवल एक बहिष्कृत विशेषता जोड़ता हूं Attributes on method implementation and its declaration must match कहता है। क्या मुझे विधि कार्यान्वयन में smth जोड़ने की ज़रूरत है?एक्सकोड 4

धन्यवाद!

उत्तर

13

बस घोषणा करने के लिए विशेषता जोड़ें:

@interface Blah 
- (void)method __attribute__((deprecated)); 
@end 

बशर्ते आपके शामिल अनुवाद के लिए सही हैं, यह ठीक काम करना चाहिए। शायद आपने परिभाषा पर विशेषता को जोड़ा है, घोषणा नहीं है? अन्यथा, एक प्रदर्शन (कोड नमूना) मदद करेगा।

अद्यतन

हालांकि उपरोक्त दृष्टिकोण ठेठ संदेशों के लिए काम करता है, ऐसा लगता है बजना IBAction रों के साथ भ्रमित हो जाता है।

क्लैंग के साथ, ibaction विशेषताओं को पूरी तरह से डाला गया है (जो पहले typedef था) के लिए।

जब विशेषता घोषणा में निर्दिष्ट किया जाता है केवल, पूर्वप्रक्रमक उत्पादन इस प्रकार है:

// preprocessed declaration 
- (void)__attribute__((ibaction))setSomething:(id)sender __attribute__((noreturn)); 
// preprocessed implementation 
- (void)__attribute__((ibaction))setSomething:(id)sender 
...  

तो, यह प्रतीत होता है संकलक सिर्फ इस छिपा सजावट से उलझन में है, और आप भी करने के लिए विशेषता को जोड़ना होगा विधि IBAction होने पर चेतावनी को दबाने के लिए कार्यान्वयन/परिभाषा।

+0

यह काम नहीं करता है! –

+0

मेरी मशीन पर काम करता है;) अपना कोड पोस्ट करें! – justin

+0

- (आईबीएक्शन) शोटाग __attribute __ ((बहिष्कृत)); मुझे यह मिलता है: विधि कार्यान्वयन पर गुण और इसकी घोषणा मेल खाना चाहिए। –

0

आपको कम से कम एक्सकोड 4.3.2 में क्लैंग के साथ घोषणा और कार्यान्वयन दोनों पर बहिष्कृत विशेषता डालना है।

+0

यह सही है। पर क्यों? –

+0

शग। मुझे लगता है कि उन्होंने जीसीसी में क्लैंग में इसे अलग-अलग लागू किया। –