2011-06-10 6 views
6

में गतिशील विधि कॉल उद्देश्य सी में NSString * में अपने नाम के साथ चयनकर्ता को कैसे कॉल कर सकता हूं? मुझे चयनकर्ता को केवल तभी कॉल करने की आवश्यकता है जब लक्ष्य इसे स्वीकार करेगा। जैसेउद्देश्य-सी

+(void) callMethod: (NSString *) method onObject: (id) object 
{ 
    // do some magic 
} 

जब मैं callMethod: @"Foo" onObject: objobj यदि लागू फोन Foo तो [obj Foo], बुलाया जाना चाहिए अगर यह इसे लागू नहीं करता है, कुछ भी नहीं होना चाहिए।

उत्तर

15
SEL selector = NSSelectorFromString(method); 
if ([object respondsToSelector:selector]) { 
    [object performSelector:selector]; 
} 
6

सबसे पहले, आप तो जैसे एक विधि नाम में स्ट्रिंग परिवर्तित करने के लिए, NSSelectorFromString() विधि का उपयोग करें: फिर

SEL methodToCall = NSSelectorFromString(stringToConvertToMethod);

, आप रिसीवर पर विधि के लिए जाँच करें और विधि अगर फोन यह मौजूद है:

if ([receiver respondsToSelector:methodToCall]) { 

    // Method exists, call it. 
    [receiver performSelector:methodToCall]; 

} 

बस ध्यान दें कि एक संभावित नकारात्मक पक्ष यह है कि आप तर्कों में पारित नहीं कर पाएंगे। एक तर्क पारित करने के लिए, आप NSObject विधि performSelector:withObject: पर कॉल करेंगे। दो तर्कों को पार करने के लिए, performSelector:withObject:withObject:

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

  • कोई संबंधित समस्या नहीं^_^