2012-05-18 21 views
9

क्या ऐसा करना संभव है? UIApplication'sscheduledLocalNotifications उन सूचनाओं को वापस नहीं प्रतीत होता है जो पहले से ही उपयोगकर्ता के अधिसूचना केंद्र में पहुंचे हैं, इसलिए मुझे लगता है कि यह डिज़ाइन द्वारा हो सकता है, लेकिन मुझे इसका कोई दस्तावेज सबूत नहीं मिल रहा है।पहले से ही वितरित UILocalNotification को खारिज कर दें?

कोई भी जानता है?

धन्यवाद!

संपादित करें: इस मिला:

आप cancelLocalNotification को फोन करके एक विशिष्ट अनुसूचित अधिसूचना रद्द कर सकते हैं: आवेदन वस्तु पर, और आप cancelAllLocalNotifications फोन करके सभी अनुसूचित अधिसूचना रद्द कर सकते हैं। इन तरीकों में से दोनों भी प्रोग्राम के रूप में खारिज एक वर्तमान में

यहाँ: http://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html

हालांकि, कैसे मैं पहले से वितरित अधिसूचना के लिए एक संदर्भ मिलता है, अगर scheduledLocalNotifications मुझे सूचनाएं कि पहले से ही किया गया है नहीं देता है पहुंचा दिया?

संपादित करें 2:

यहाँ मैं के बाद मैं कुछ सूचनाएं पंजीकृत कर लिया है, ऐसा करने के लिए कोशिश कर रहा हूँ है:

UIApplication *app = [UIApplication sharedApplication]; 

for (UILocalNotification *localNotification in app.scheduledLocalNotifications) 
{ 
    if (someCondition) { 
      [app cancelLocalNotification:localNotification]; 
     } 
    } 
} 

समस्या यह है कि एक बार वे वितरित कर रहे हैं, वे अब कर रहे हैं है 'निर्धारित लोकल नोटिफिकेशन' में।

+0

क्या आप कुछ कोड दिखा सकते हैं, आप इसका उपयोग कैसे कर रहे हैं? – rishi

+0

निश्चित रूप से, कुछ कोड के साथ बस अद्यतन प्रश्न। – elsurudo

उत्तर

9

आप सूचनाओं का आपका अपना NSMutableArray लिए अपने नव निर्मित सूचनाएं जोड़कर इस हल कर सकते हैं और उस सरणी जाँच app.scheduledLocalNotifications के बजाय। कुछ इस तरह:

अपने व्यू कंट्रोलर में NSMutableArray जोड़ें।ज फ़ाइल: जब अपने ViewController

currentNotifications = [[NSMutableArray alloc] init]; 
की शुरुआत

NSMutableArray *currentNotifications; 

यह आरंभ

जब कोई सूचना आरंभ करते हैं, यह भी अपने सरणी में जोड़ने के लिए:

UILocalNotification *notification = [[UILocalNotification alloc] init]; 
... 
[currentNotifications addObject:notification]; 
[[UIApplication sharedApplication] presentLocalNotificationNow:notification]; 

बाद में जब आपको लगता है कि अधिसूचना रद्द करना चाहते हैं , इसके बजाय अपने सरणी में इसके लिए देखो। इसके अलावा अपने सरणी से हटाने :

for (UILocalNotification *notification in currentNotifications) { 
    if (someCondition) { 
     [[UIApplication sharedApplication] cancelLocalNotification:notification]; 
     [currentNotifications removeObject:notification]; 
    } 
} 
+1

यह तब तक काम करेगा जब आपका ऐप निवासी रहता है। जैसे ही यह इस्तीफा दे, 'वर्तमान नोटिफिकेशन' टोस्ट होगा। मेरी इच्छा है कि वितरित अधिसूचनाएं भी सूचीबद्ध करें, @elsurudo। – steveluscher

+0

यह केवल –

+0

के आसपास एक काम है यह आईओएस 9.3.5 के साथ मेरे लिए काम नहीं कर रहा है, अधिसूचना केंद्र में अधिसूचना रहता है –

1

इस लिंक का प्रयास करें:

Apple doc

Some tutorial

और स्थानीय अधिसूचना अपने अनुप्रयोग में नहीं करने के लिए उपकरण सूचना केंद्र दर्ज की है।

लेकिन, यदि आपके ऐप चल रहा है, और एक अधिसूचना समय है, तो आप में खेल में अधिसूचना मापदंडों प्राप्त कर सकते हैं:

-(void) application:(UIApplication*)app didReceiveLocalNotification:(UILocalNotification*) notification 
{ 
// local notification is geted 
} 
+0

हाँ, मैंने पहले ही उनको पढ़ लिया है। लेकिन मैं जो करना चाहता हूं वह बाद में (मनमाना) समय पर एक विशिष्ट अधिसूचना को हटा देता है, न कि जब इसे पहली बार प्राप्त किया जाता है। – elsurudo

0

अपने अपडेट किए गए कोड को देखने के बाद, ऐसा लगता है कि आप में रुचि रखते हैं को रद्द सब पाश के लिए साथ-इन नोटिफिकेशन, आप उपयोग करती हैं इसलिए कर सकते हैं -

[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
+0

ओह, ओह। मेरे वास्तविक कोड में, मेरे पास एक शर्त है [ऐप रद्द करें लोकलोटेशन: स्थानीय नोटिफिकेशन], इसलिए रद्द करेंअलोकोकल नोटिफिकेशन चाल नहीं करेगा। मैं इसे मिलान करने के लिए अपना कोड स्निपेट अपडेट करूंगा। – elsurudo

2

मैं भी इस का जवाब तलाश रहे हैं। मेरी समस्या यह थी कि मैं अधिसूचना केंद्र में बैठे सभी ऐप से संबंधित अधिसूचनाओं को 'साफ' करना चाहता था, अगर उपयोगकर्ता अपने डॉक आइकन से ऐप खोलता है (क्योंकि कुछ पहले से निकाल दी गई सूचनाओं में कुछ भी नहीं है ...)

सौभाग्य से, ऐसा लगता है कि cancelAllNotifications केवल निर्धारित लोगों को रद्द नहीं करता है, बल्कि सब कुछ। तो मैं बस अपने मौजूदा अनुसूचित सूचनाओं का एक संदर्भ में आयोजित किए गए उन्हें नष्ट करने से पहले, और फिर उन्हें तदनुसार पुनर्निर्धारित:

UIApplication *app = [UIApplication sharedApplication]; 

NSLog(@"\nScheduled notif count (prior) = %d", app.scheduledLocalNotifications.count); 

NSArray *scheduledNotifs = app.scheduledLocalNotifications; // hold on to a reference 

[[UIApplication sharedApplication] cancelAllLocalNotifications]; // blast everything 

NSLog(@"\nScheduled notif count (post-wipeout) = %d", app.scheduledLocalNotifications.count); 

for (UILocalNotification *notif in scheduledNotifs) { 
    [app scheduleLocalNotification:notif]; // put them back 
} 

NSLog(@"\nScheduled notif count (post-repopulation) = %d", app.scheduledLocalNotifications.count); 

सुनिश्चित नहीं हैं कि अगर किसी को भी मदद करता है, लेकिन यह मेरी स्थिति के लिए महान काम किया।

1

जब आप NSKeyerDraults में इसे NSData में परिवर्तित करने के लिए एनएसयूएडर डीफॉल्ट में सहेजते हैं तो आप इसे अधिसूचना शेड्यूल करते समय कर सकते हैं।

इसे वापस करने के लिए UILocalNotification के रूप में आप NSKeyedUnarchiver का उपयोग करते हैं। फिर आप रद्द करें लोकलोटेशन विधि का उपयोग कर इसे हटाने में सक्षम हैं।

पूरी तरह से here (स्विफ्ट संस्करण + मूल Obj सी समाधान के लिए लिंक)

3

समझाया iOS10 चूंकि अब इस के लिए देशी समर्थन है अगर आप UNUserNotificationCenter का उपयोग कर पर चले गए हैं।

एप्पल डॉक्स राज्य:

func getDeliveredNotifications(completionHandler: @escaping ([UNNotification]) -> Void)

ऐप्स की सूचनाओं की एक सूची है कि अभी भी सूचना केंद्र में प्रदर्शित किए जाते हैं प्रदान करता है।

func removeDeliveredNotifications(withIdentifiers: [String])

अधिसूचना केंद्र से निर्दिष्ट सूचनाएं निकाल देता है।

func removeAllDeliveredNotifications()

अधिसूचना केंद्र से ऐप्स की सूचनाओं के सभी निकालता है।