2012-02-12 17 views
6

के लिए एप्लिकेशन बैज नंबर को कैसे बढ़ाया जाए, मैंने एक स्थानीय अधिसूचना सेट की है जो हर मिनट दोहराती है, हालांकि मुझे प्रत्येक बार वृद्धि करने के लिए एप्लिकेशन बैज संख्या की आवश्यकता होती है। जब मैं इसे फिलहाल चलाता हूं तो यह बढ़ता प्रतीत नहीं होता है, यह सिर्फ 1 रहता है। कृपया कोई मेरी मदद कर सकता है?पुनरावर्ती स्थानीय अधिसूचना (आईफ़ोन)

// Create the UILocalNotification 
UILocalNotification *myNotification = [[UILocalNotification alloc] init]; 
myNotification.alertBody = @"Blah blah blah..."; 
myNotification.alertAction = @"Blah"; 
myNotification.soundName = UILocalNotificationDefaultSoundName; 
myNotification.applicationIconBadgeNumber++; 
myNotification.timeZone = [NSTimeZone defaultTimeZone]; 
myNotification.repeatInterval = NSMinuteCalendarUnit; 
myNotification.fireDate = [[NSDate date] dateByAddingTimeInterval:30]; 
[[UIApplication sharedApplication] scheduleLocalNotification:myNotification]; 
+0

आप कुछ कोड पोस्ट कर सकते हैं में दूसरे छोर पर अनुसूची में सक्षम था? – HeikoG

+0

@HeikoG मैंने नोटिफिकेशन बनाने के लिए उपयोग किया गया कोड जोड़ा है। –

+0

@TheCrazyChimp क्या आपको कभी इस समस्या का समाधान मिला है? –

उत्तर

18

बहुत के अनुसंधान के करने के बाद मैं पता लगा समाधान कोई समाधान नहीं है कि वहाँ है:

iPhone: Incrementing the application badge through a local notification

यह स्थानीय सूचनाएं अपने अनुप्रयोग, जबकि साथ गतिशील बिल्ला नंबर अपडेट करने के लिए संभव नहीं है पृष्ठभूमि में है। आपको पुश नोटिफिकेशन का उपयोग करना होगा।

+5

काम करता है, जबकि यह उत्तर तकनीकी रूप से सही है, आप वास्तव में साझा कर सकते हैं कि क्रेज़ी चिम्प साझा साझा यूआईपीप्लिकेशन उदाहरण का उपयोग करके थोड़ा अतिरिक्त काम करने के साथ क्या करना चाहता है। हर बार है कि आप एक नया स्थानीय अधिसूचना या एप्लिकेशन के लोड होने का समय निर्धारित है, तो आप सभी भावी रद्द करने और कालानुक्रमिक क्रम में उन के माध्यम से गणना करके भविष्य स्थानीय सूचनाओं के लिए बैज मायने रखता है पुन: असाइन करने 'scheduledLocalNotifications' संपत्ति और 'cancelAllLocalNotifications' संपत्ति का उपयोग कर सकते और आपके द्वारा असाइन किए गए बैज नंबर को बढ़ाएं। एप्लिकेशन टाइपिंग के रूप में आसान नहीं है बैज नम्बर ++, लेकिन यह काम करता है। इस उपयोगकर्ता की टिप्पणी के लिए – BFar

+0

+1। मैंने इस दृष्टिकोण का परीक्षण किया और यह काम करता है। यहाँ कार्यान्वयन का एक और अधिक पूर्ण विवरण जाता है: http://stackoverflow.com/a/15461328/2546416 –

+1

हां लेकिन यह है कि अगर आप repeatInterval उपयोग कर रहे हैं काम नहीं करेगा .. यदि आप कर रहे हैं एप्लिकेशन फिर से शुरू कर दिया कभी नहीं है आप और बैज वैल्यू की भविष्यवाणी नहीं कर सकता (क्योंकि आपके पास दैनिक दोहराना अंतराल है) तो आप वृद्धि नहीं कर सकते हैं ... –

-1

कोशिश की तरह कुछ:

int plusOne = [myNotification.applicationIconBadgeNumber intValue]; 
plusOne++; 

myNotification.applicationIconBadgeNumber = plusOne; 
+0

दुर्भाग्यवश यह मेरे लिए काम नहीं किया - हालांकि सुझाव के लिए धन्यवाद। –

-1

यह काम करना चाहिए

यहाँ कैसे मैं सूचनाएं बनाती है।

myNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 
+1

नहीं, आदमी। यह शायद ही कभी – fnc12

0

जहाँ इसकी कोई सरल applicationIconBadgeNumber++ विधि, के रूप में BFar उल्लेख किया है, आप प्राप्त कर सकते हैं कि तुम क्या जब भी एक अधिसूचना जोड़ा या हटा दिया जाता है अनुसूचित UILocalNotifications 'applicationIconBadgeNumbers के सभी अपडेट करके पूछ रहे हैं।

जबकि इस अगर आप गौर करती है कि का उपयोग repeatInterval, जब तक आप scheduleNotification और decrementBadgeNumber सही समय पर कहते हैं, वर्ग नीचे चाल करना चाहिए काम नहीं करेगा।

@implementation NotificationScheduler 

+ (void) scheduleNotification:(NSString*)message date:(NSDate*)date { 
    UIApplication *app = [UIApplication sharedApplication]; 
    UILocalNotification *notification = [[UILocalNotification alloc] init]; 
    if (notification) { 
     notification.fireDate = date; 
     notification.timeZone = [NSTimeZone defaultTimeZone]; 

     notification.alertBody = message; 
     notification.soundName = UILocalNotificationDefaultSoundName; 
     notification.applicationIconBadgeNumber = [self getExpectedApplicationIconBadgeNumber:date]; 

     [app scheduleLocalNotification:notification]; 
     [self updateBadgeCountsForQueuedNotifiations]; 
    } 
} 

+ (void) decrementBadgeNumber:(long)amount { 
    [self setCurrentBadgeNumber:([self getCurrentBadgeNumber] - amount)]; 
    [self updateBadgeCountsForQueuedNotifiations]; 
} 

+ (long) getExpectedApplicationIconBadgeNumber:(NSDate*)notificationDate { 
    long number = [self getCurrentBadgeNumber]; 
    for (UILocalNotification *notice in [self getScheduledLocalNotifications]) { 
     if (notice.fireDate <= notificationDate) { 
      number++; 
     } 
    } 
    return number; 
} 

+ (void) updateBadgeCountsForScheduledNotifiations { 
    long expectedBadgeNumber = [self getCurrentBadgeNumber]; 
    NSArray *allLocalNotifications = [self getScheduledLocalNotifications]; 
    for (UILocalNotification *notice in allLocalNotifications) { 
     expectedBadgeNumber++; 
     notice.applicationIconBadgeNumber = expectedBadgeNumber; 
    } 
    [[UIApplication sharedApplication] setScheduledLocalNotifications:allLocalNotifications]; 
} 

+ (long) getCurrentBadgeNumber { 
    return [UIApplication sharedApplication].applicationIconBadgeNumber; 
} 

+ (void) setCurrentBadgeNumber:(long)number { 
    [UIApplication sharedApplication].applicationIconBadgeNumber = number; 
} 

+ (NSArray*) getScheduledLocalNotifications { 
    NSSortDescriptor * fireDateDesc = [NSSortDescriptor sortDescriptorWithKey:@"fireDate" ascending:YES]; 
    return [[[UIApplication sharedApplication] scheduledLocalNotifications] sortedArrayUsingDescriptors:@[fireDateDesc]]; 
} 

@end 
+0

यह अपडेटबैडबॉर्ड्सफोरक्वाइड नॉटिफ़ीएशन विधि कार्यान्वयन को याद कर रहा है ... कृपया इसे अपडेट करें ... –

1

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

-1

इस प्रयास करें ... यह सरल परिदृश्य में मेरे लिए काम किया ...

notification.applicationIconBadgeNumber = [UIApplication sharedApplication].scheduledLocalNotifications.count + 1; 

और भूल नहीं है जब एप्लिकेशन लॉन्च 0 वापस करने के लिए बैज आइकन स्थापित करने के लिए।

0

मैं निम्न पंक्ति का उपयोग कर यह करने के लिए, जबकि स्थानीय अधिसूचना

localNotification.applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + 1; 

और AppDelegate

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 

    application.applicationIconBadgeNumber -= 1; 
} 
संबंधित मुद्दे