2012-01-16 15 views
12

के रूप में एक वर्ग विधि का उपयोग कर सकते हैं एक वर्ग विधि विधि मैं निम्नलिखित की घोषणा में:मैं एक प्रतिनिधि कॉलबैक

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" 
                message:@"World" 
                delegate:self 
             cancelButtonTitle:@"Cancel" 
             otherButtonTitles:@"Done", nil]; 

अब भले ही युक्त विधि एक वर्ग विधि है, संकलक delegate:self के बारे में शिकायत नहीं है। अब प्रतिनिधि बनने के लिए मुझे UIAlertViewDelegate प्रोटोकॉल में विधि को लागू करना होगा।

यह अब, कोई फर्क पड़ता है अगर विधि एक वर्ग विधि है या नहीं, क्रम में जब उपयोगकर्ता मेरी AlertView साथ सूचना का आदान के नाम से जाना?

मैं इस सवाल से पूछ रहा हूं, क्योंकि मेरी कक्षा में कोई आवृत्ति चर नहीं है इसलिए मैं इसे केवल कक्षा विधियों को शामिल करना पसंद करूंगा।

+1

आपका मतलब क्लास विधि है? : पी –

+0

आप स्वयं के बजाय कक्षा का नाम आजमा सकते हैं, जो उदाहरण को संदर्भित करता है। –

+0

http://stackoverflow.com/questions/1781046/dynamically-invoke-a-class-method-in-objective-c का उत्तर भी देखें। मुझे लगता है कि यह प्रासंगिक है। एक वर्ग विधि में –

उत्तर

11

सबसे पहले, मुझे "स्थैतिक" विधियों का मानना ​​है, आपका मतलब क्लास विधियों (के साथ घोषित -) के साथ घोषित किया गया है।

उद्देश्य-सी के बारे में "कंपाइलर शिकायत नहीं करता" हमेशा आपको अधिक नहीं बताता है। इसका मतलब यह है कि आपने संकलक को आश्वस्त किया है कि सब कुछ (या कम से कम ) रनटाइम पर काम करना चाहिए।

अंत में, यदि वस्तु आप एक प्रतिनिधि के रूप में प्रदान सही संदेश का जवाब है, संकलक परवाह नहीं है कि वह एक वर्ग है (और न क्रम होगा)। इस मामले में, आप कक्षा विधि से self प्रदान कर रहे हैं। ऐसा लगता है कि आपने [MyClass class] टाइप किया था।

मुझे लगता है कि यह शायद संदिग्ध है कि क्या आप करना चाहिए - लेकिन शायद यह आपके प्रश्न की सीमाओं के बाहर है।

14

मैं अपने निष्कर्षों में से कुछ साझा करना चाहते हैं:

  1. इससे कोई फर्क नहीं पड़ता कि मैं इस delegate:self या delegate:[MyClass class]

  2. हालांकि तरह प्रतिनिधि घोषित, यह बात मैं विधि कैसे घोषित करता है :

    यह काम करता है

    +(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
        // Some Actions here 
    } 
    

    हालांकि निम्नलिखित "वाक्य रचना" UIAlertViewDelegate प्रोटोकॉल में घोषणा है, यह काम नहीं करता:

    -(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ 
        // Some Actions here 
    } 
    
+1

हां, 'स्वयं' और '[MyClass क्लास] 'एक" MyClass "विधि के बराबर हैं। यदि आप अपनी कक्षा को प्रतिनिधि बनना चाहते हैं, तो आपको इसे कक्षा विधि के रूप में घोषित करना होगा। दस्तावेज वर्णन कर रहा है कि इंस्टेंस विधि को कैसे कार्यान्वित किया जाए, जो मुझे लगता है कि यह बहुत सार्वभौमिक है "यह कैसे किया जाता है"। अंत में वास्तव में महत्वपूर्ण बात यह है कि प्रतिनिधि के रूप में जो भी वस्तु आप प्रदान करते हैं, वह "चेतावनी दृश्य: क्लिक किया गया बटनऑट इंडेक्स:" चयनकर्ता का जवाब देता है। तो, हाँ, जवाब अभी भी है कि आप इसे * कर सकते हैं। चाहे आप अलग होना चाहिए। – huskerchad

+0

वाह! दस लाख सालों में मुझे लगता है कि प्रतिनिधि विधि को कक्षा विधि में बदलना रास्ता तय नहीं होगा। शुक्रिया शुक्रिया! मैंने एक समान समस्या को हल करने की कोशिश कर 5+ घंटे खो दिए हैं। ... एनएससीडेशन की आवश्यकता नहीं थी या चयनकर्ता या कुछ भी नहीं! – JohnQ

+0

आपको बहुत बहुत धन्यवाद !!!!!!!!!!! – ElizaS

1

हाँ आप कर सकते हैं !!! एक वर्ग भी एक वस्तु है।

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