2011-12-16 9 views
9

पर रीडायरेक्ट करना संभव है, मैं कुछ छोटी हैकी करना चाहता हूं।क्या सभी चयनकर्ता कॉलों को पकड़ना और उन्हें रनटाइम

जब हम किसी वर्ग पर एक विधि को आज़माकर कॉल करते हैं जहां परिभाषित नहीं किया जाता है तो हमें आमतौर पर एक त्रुटि मिलती है, उदा।

// We get a undefined selector callback 
[myClass someUndefinedMethod]; 

मैं MyClass में कुछ है कि इसके साथ इन सभी अपरिभाषित विधि कॉल और सौदों पकड़ता जोड़ना चाहते हैं। क्या यह संभव है?

मैं कुछ इस तरह चाहते हैं, लेकिन सब विधि रोकना होगा जो कहता है:

@implementation MyClass 

    - (void) performSelector(SEL):selector { 

      // Check if the method exists 
      if (![self respondsToSelector:selector]) { 
       // Handle unimplemeted selector 
       NSLog(@"No method called %@", selector); 
      } 

      // Otherwise proced as normal 
      else { 
       [super performSelector:selector]; 
      } 
    } 

@end 

उत्तर

11

क्यों न केवल एनएसओब्जेक्ट पर doesNotRecognizeSelector: विधि को ओवरराइड करें (मान लीजिए कि आप इससे विरासत में हैं, जो आपको होना चाहिए)?

+0

बिल्कुल सही। यही वह है जिसे मैं ढूंढ रहा था, मुझे पता था कि एक रास्ता होगा। – Robert

+0

@ पॉलौली आप भाग्यशाली हो गए, मेरे ठीक उसी जवाब के साथ 2 मिनट बाद और आपका उत्तर स्वीकार कर लिया गया :) – Sulthan

+0

सभी लिंक के बारे में ... ;-) – paulbailey

0

मुझे लगता है कि आप कोशिश करते हैं और "NSObject" के लिए एक नई श्रेणी बनाने के लिए और इस तरह है कि विशेष विधि के ऊपर लिख सकते हैं। वैसे भी, ध्यान रखें कि ऐप्पल विधियों को ओवरराइट करने के लिए श्रेणियों का उपयोग न करने की सिफारिश करता है, लेकिन नई कार्यक्षमता जोड़ने के लिए, इसलिए यह थोड़ा हैकिश है। हालांकि, मुझे यकीन नहीं है कि चेतावनी से छुटकारा पड़ेगा ...

7

ओवरराइड विधि: -[MyClass doesNotRecognizeSelector:] और जो भी आप चाहते हैं उसे कॉल करें।

यह NSManagedObject कोर डेटा गुणों को प्राप्त/सेट करने के लिए कर रहा है।

1

मुझे स्पष्ट नहीं है कि आप कक्षा में भेजे गए संदेशों को या किसी वर्ग के उदाहरण में अवरुद्ध करने का प्रयास कर रहे हैं या नहीं। किसी भी मामले में शायद 'संदेश अग्रेषण' और 'अग्रेषण संदेश' के विषयों पर खोज/खोज कर रहे हैं। इसके अलावा NSObject के forwardInvocation और अग्रेषण http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html

ये मुझे जवाब मैं खोज रहा था मिल गया संदेश पर एप्पल के क्रम pgmg गाइड की धारा देख सकते हैं और मैं नहीं देखा था उन्हें इस सवाल पर कहीं उल्लेख किया है।

+0

मुझे लगता है कि यह स्वीकार्य समाधान से बेहतर काम करता है। – huggie

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