2012-11-07 23 views
12

मैं किसी दिए गए अधिसूचना नाम के लिए पर्यवेक्षकों (ऑब्जेक्ट्स और चयनकर्ताओं) की एक सूची पुनर्प्राप्त करना चाहता हूं। मुझे पता है कि इसके लिए कोई आधिकारिक एपीआई नहीं है। मुझे यह भी पता है कि मैं इसे पूरा करने के लिए subclass NSNotificationCenter कर सकता हूं। कभी-कभी हालांकि यह एक व्यवहार्य विकल्प नहीं है क्योंकि NSNotificationCenter उपयोग पूरे कोड या यहां तक ​​कि बाइनरी ढांचे में फैला हुआ है।सभी NSNotificationCenter पर्यवेक्षकों को कैसे पुनर्प्राप्त करें?

तो मैं ऐसा करने के लिए एक अनौपचारिक/निजी तरीका ढूंढ रहा हूं। (चूंकि यह केवल डिबगिंग के बारे में है, यह ठीक है।)

+0

तुम बस हो सकता है विधियों को तेज करना चाहते हैं ताकि आप ऑब्जेक्ट प्राप्त कर सकें: http://cocoadev.com/wiki/MethodSwizzling – rckoenes

+0

यहां एक ऐसा उत्तर है जो पर्यवेक्षकों को ट्रैक करने के लिए swizzling लागू करता है http://stackoverflow.com/questions/10346700/ns 'SFObservers' के लिए अधिसूचना-सूची-पर्यवेक्षकों/34692724 # 34692724 –

उत्तर

17

अंत में, एप्पल सभी नोटिफिकेशन केंद्र पर्यवेक्षकों मुद्रित करने के लिए एक तरह से जोड़ा

<NSNotificationCenter:0x7f997b307500> 
Name, Object, Observer, Options 
WebPreferencesRemovedNotification, 0x11165b680, 0x116c87ff8, 1400 
UIApplicationWillEnterForegroundNotification, 0x11165b680, 0x7f997a838000, 1400 
... 
1

आप मूल addObserver:selector:name:object विधि का नाम बदलने आप NSNotificationCenter उपवर्ग के लिए नहीं करना चाहते हैं कर सकते हैं और इस तरह के नाम के साथ अपने स्वयं बना सकते हैं और कुछ सरणी के लिए वहाँ में पर्यवेक्षकों जोड़ने तो मूल नाम बदलकर विधि कॉल ।

निम्न विधियों पर एक नज़र डालें: class_addMethod, class_replaceMethod, class_getMethodImplementation

इसके अलावा इस तो सवाल को देखो: Method Swizzling

मैं तुम क्यों पर्यवेक्षकों चाहते हैं, लेकिन आप इस वर्ग के लिए उपयोगी है, जो आप के लिए स्वचालित रूप से पर्यवेक्षकों जो मैं हो सकता है कि आप क्या चाहते लगता है निकालता है मिल सकती है यकीन नहीं है।

po [NSNotificationCenter defaultCenter] 

यह साथ नाम, वस्तु, ऑब्जर्वर एक अल्पविराम से अलग सूची प्रिंट, और विकल्प:: SFObservers

+0

+1! एसओ सवाल जो आप इंगित कर रहे हैं वह वास्तव में मुझसे (समाधान सहित) है ;-) –

+0

हाहा, अच्छा समाधान और प्रश्न हालांकि: डी –

+0

यहां एक उत्तर है जो पर्यवेक्षकों को ट्रैक करने के लिए swizzling लागू करता है http://stackoverflow.com/प्रश्न/10346700/nsnotificationcenter-सूची के- पर्यवेक्षकों/34692724 # 34692724 –