19

मैं अपने आवेदन के लिए नए माउंटेन शेर NSUserNotificationCenter का उपयोग करने की कोशिश कर रहा हूं (जो वास्तव में बहुत कठिन नहीं है)। पोस्ट करना सूचनाएंNSUserNotificationCenter अधिसूचना खारिज कर

NSUserNotification *userNotification = [[NSUserNotification alloc] init]; 
userNotification.title = @"Some title"; 
userNotification.informativeText = @"Some text"; 

[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification]; 

हालांकि के माध्यम से एक आकर्षण की तरह काम करता है, मैं सभी सूचनाएं कि स्क्रीन पर कर रहे हैं एक बार एप्लिकेशन लाभ ध्यान केंद्रित को खारिज करना चाहते हैं। जैसे नए संदेश ऐप की तरह यह करता है। जब पृष्ठभूमि में नए संदेश प्राप्त होते हैं, अधिसूचनाएं दिखायी जाती हैं। जब ऐप फिर से सक्रिय हो जाता है, तो इन्हें स्वचालित रूप से खारिज कर दिया जाता है और स्क्रीन से और अधिसूचना केंद्र से गायब हो जाता है।

इसे दोहराने के लिए, मैंने NSApplicationDidBecomeActiveNotification अधिसूचना को एक विधि पंजीकृत की है जिसे सफलतापूर्वक कहा जाता है। वहां मैं [NSUserNotificationCenter defaultUserNotificationCenter] removeAllDeliveredNotifications] पर कॉल करता हूं।

हालांकि, इसका प्रभाव यह है कि अधिसूचना केंद्र में एकत्र की गई सूचनाएं हटा दी जाती हैं जबकि शीर्ष दाएं कोने में प्रदर्शित "बुलबुले" संबंधित होते हैं।

सभी वितरित अधिसूचनाओं को इटरेट करना और उन्हें स्वयं को हटाने से बिल्कुल वही प्रभाव पड़ता है, जैसा कि deliverNotification के बजाय scheduleNotification का उपयोग कर रहा है।

क्या मैं अकेला अनुभव कर रहा हूं, या क्या मुझे ऑन-स्क्रीन भाग को अस्वीकार करने और प्रोग्रामिंग अधिसूचना के अधिसूचना केंद्र भाग को खारिज करने के लिए कुछ याद आ रही है?

+0

लगता है जैसे आपको http://bugreport.apple.com पर एक बग के रूप में इसकी रिपोर्ट करना चाहिए। –

+0

पहले से ही ऐसा किया है। ऐसा नहीं है कि ऐप्पल में कोई भी वास्तव में उन्हें पढ़ता है, लेकिन सिर्फ पूरा होने के लिए। यकीन नहीं है कि अगर मैं यहाँ कुछ याद नहीं कर रहा हूं और यह मेरी तरफ से एक गलती है। – BinaryBucks

+0

आप किस संदर्भ में अधिसूचनाओं का उपयोग कर रहे हैं, क्या आपको 'बुलबुले' बिल्कुल चाहिए? –

उत्तर

17

संदेश ऐप शायद निजी NSUserNotificationCenter _removeAllDisplayedNotifications या _removeDisplayedNotification: विधि का उपयोग कर रहा है।

आप यह जांचने के लिए इन विधियों का उपयोग करने का प्रयास कर सकते हैं कि यह वही है जो आप खोज रहे हैं। बस तरीकों घोषित करने के लिए इस श्रेणी इंटरफ़ेस जोड़ें:

@interface NSUserNotificationCenter (Private) 
- (void)_removeAllDisplayedNotifications; 
- (void)_removeDisplayedNotification:(NSUserNotification *)notification; 
@end 

दुर्भाग्य से, के बाद से इन गैर-दस्तावेजी तरीके हैं, तो आप उन्हें किसी ऐप App स्टोर के माध्यम से वितरित में उपयोग नहीं कर सकते। यदि यह वास्तव में आप जो खोज रहे हैं, तो आपको file a bug होना चाहिए और इन विधियों को सार्वजनिक API का हिस्सा बनने के लिए कहें।

// Clear a delivered notification from the notification center. If the 
// notification is not in the delivered list, nothing happens. 
- (void)removeDeliveredNotification:(NSUserNotification *)notification; 

// Clear all delivered notifications for this application from the 
// notification center. 
- (void)removeAllDeliveredNotifications; 

व्यवहार 10.8 के बाद से बदल दिया है, के रूप में किसी भी प्रदर्शित सूचनाओं के रूप में अच्छी तरह से हटा दिया जाता है जब इन तरीकों (धन्यवाद कहा जाता है @ के लिए 0xced:

+0

इन निजी तरीकों का उपयोग वास्तव में काम करता है, धन्यवाद। मेरे पास कोई सुराग नहीं है, क्यों ऐसी विधियां सार्वजनिक एपीआई टीबीएच का हिस्सा नहीं हैं। मैं इसके लिए एक बग रिपोर्ट फाइल करूंगा। – BinaryBucks

3

10.9 के रूप में, निम्न विधियों में किसी भी सूचना को प्रदर्शित किया हटाने स्पष्टीकरण)।

+0

क्या आप वाकई वही हैं? ** प्रदर्शित ** बनाम ** वितरित **। 10.8 पर, उनके कार्यान्वयन समान नहीं हैं। (मैंने 10.9 पर चेक नहीं किया है) – 0xced

+0

कम से कम एक परीक्षण के साथ मैंने 10.9 पर प्रदर्शन किया, '-removeAllDeliveredNotifications' को कॉल करने से वर्तमान में प्रदर्शित की गई किसी भी सूचना को हटा दिया गया। मुझे लगता है कि 10.9 पर व्यवहार नहीं होना चाहिए। इसे प्रतिबिंबित करने के लिए संपादित, धन्यवाद। –

1

removeDeliveredNotification मेरे लिए प्रदर्शित अधिसूचना (10.11 पर) को हटा रहा है, अधिसूचना पर identifier चेतावनी सेट की जानी चाहिए।

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