5

मैं अपने आवेदन के दौरान साझा किए गए एक भी NSNotificationCenter द्वारा पोस्ट की गई किसी भी NSNotifications को लॉग करना चाहता हूं। मैंने तीन पोस्ट विधियों में लॉगिंग कोड जोड़ने के इरादे से NSNotificationCenter को उपclassing करने का प्रयास किया है, लेकिन यह मेरे subclass के बजाय CFNotification केंद्र का एक उदाहरण देता है।एनएसएनोटिफिकेशन लॉगिंग

निश्चित रूप से एनएसएनोटिफिकेशन पोस्टिंग की निगरानी करने का एक तरीका है?

संपादित करें/अपडेट

दो जवाब के रूप में नीचे सही ढंग से बताते हैं मैं सभी सूचनाएं को सुनने और उन्हें एक हैंडलर में लॉग सकता है, लेकिन अनुक्रम हैंडलर ये सूचनाएं प्राप्त होगा गारंटी से दूर है के बराबर हो जाए अनुक्रम जिसमें उन्हें भेजा गया था। अगर मैं यह सुनिश्चित कर सकता हूं कि हैंडलर हमेशा सूचित करने वाला पहला हाथ होगा, तो यह काम करेगा, लेकिन मैं यह नहीं कर सकता: 'ऑर्डर करने वाले ऑर्डर करने वाले ऑर्डर को अपरिभाषित किया जाता है' NSNotification Docs

उत्तर

9

- addObserver:selector:name:object: का उपयोग करने और दोनों name और object के लिए nil गुजर करके, आप किसी भी सूचना के बारे में सूचित कर दिया जाएगा।

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(log:) name:nil object:nil]; 
    } 
    return self; 
} 

- (void)log:(NSNotification *)notification 
{ 
    NSLog(@"%@", notification); 
} 

संपादित करें: आप सूचनाओं को किया जा रहा है भेजने के लिए, NSNotificationCenter उपवर्गीकरण और निम्न विधियों अधिरोहण करने का प्रयास के वास्तविक आदेश प्राप्त करने के लिए चाहते हैं:

– postNotification: 
– postNotificationName:object: 
– postNotificationName:object:userInfo: 

उपवर्गीकरण के लिए कोई विकल्प नहीं है, तो आप, NSNotificationCenter पर एक श्रेणी को परिभाषित करने पर विचार कर सकते हैं जहां आप सुपर कार्यान्वयन को कॉल करने के साथ इन विधियों को ओवरराइड करते हैं। (आपको एक श्रेणी के भीतर सुपर कॉल करने के तरीकों को तेज करने की आवश्यकता होगी)। मुझे बताओ कि आपको ऐसा करने में मदद की ज़रूरत है या नहीं।

+0

धन्यवाद। लेकिन समस्या यह है कि मैं पूर्व-प्रेषण लॉग नहीं कर सकता। पर्यवेक्षकों के अधिसूचना के अनुक्रम में एक मनमानी स्थिति में पर्यवेक्षक के रूप में भेजे जाने के बाद मुझे नोटिफिकेशन लॉग इन करने के लिए छोड़ दिया गया है। अगर मैं प्रेषण बिंदु पर लॉग कर सकता हूं तो मुझे अधिसूचना अनुक्रम का एक बहुत स्पष्ट विचार मिलता है। इस तरह के वैश्विक श्रोता को अधिसूचित नहीं किया जा सकता है जब तक कि पिछले हैंडलर ने घटनाओं का अनुक्रम नहीं दिया है, जिसका अर्थ है कि मैं प्रेषण के आदेश को देखने में असमर्थ हूं, केवल इस विशेष पर्यवेक्षक को प्राप्त करने का आदेश ही प्राप्त होगा। – Undistraction

+0

मेरा संपादन जांचें;) –

+0

धन्यवाद। समस्या यह है कि जब आप एक NSNotificationCenter आवंटित/init करते हैं तो आपको एनएसएनोटिफिकेशन सेंटर वापस नहीं मिलता है। आपको एक CFNotificationCenter मिलता है। NSNotificationCenter के उप-वर्ग के बारे में भी यही सच है। तो निश्चित रूप से NSNotificationCenter को एक श्रेणी जोड़ना मदद नहीं करेगा? – Undistraction

0

आपको [addObserver] का उपयोग करने में सक्षम होना चाहिए: स्वयं चयनकर्ता: @ चयनकर्ता (जो भी :) नाम: शून्य वस्तु: शून्य] और बस अपना लॉगिंग कोड जो भी हो: विधि में डाल दें। इस पर्यवेक्षक को आपके ऐप द्वारा पोस्ट की गई सभी सूचनाएं मिलनी चाहिए (कम से कम उन सभी को डिफ़ॉल्ट केंद्र द्वारा पोस्ट किया गया)।

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