如何增加/更新localNotification的徽章号

时间:2010-10-08 11:51:21

标签: objective-c ios4

我使用localNotification制作了生日提醒应用程序。

它读取了AddressBook&的联系人。找出那天(今天)的生日清单。

我每天都在使用localNotification.repeatinterval(NSDayCalenderUnit)重复此应用。

这对我来说很好。

当我第一次收到通知时,它的徽章号码是1(没问题),但如果我关闭通知&让应用程序在后台运行我在第二天收到另一个通知。(然后它的徽章不应该是2)。

所以请指导我怎样才能增加这个徽章。当我的应用在后台运行时关闭通知时计算。

我不知道应用程序何时通过localNotification.repeatinterval在后台运行,如果触发了该方法。

我将不胜感激。

2 个答案:

答案 0 :(得分:4)

编辑:  可能在这种情况下有很多更好的解决方案,但就我而言,这种方法非常有效。如果有人有更好的解决方案,请与我们分享。 编辑。

我增加了徽章编号逻辑。在我的AppDelegate.m文件中,我编写了一个名为arrangeBadgeNumbers的方法:

-(void)arrangeBadgeNumbers{
self.notificationsArray = [NSMutableArray arrayWithArray:[[UIApplication sharedApplication] scheduledLocalNotifications]];
NSLog(@"notifications array count: %d",self.notificationsArray.count);
NSMutableArray *fireDates = [[NSMutableArray alloc]init];
for (NSInteger i=0; i<self.notificationsArray.count; i++) 
{
    UILocalNotification *notif = [self.notificationsArray objectAtIndex:i];
    NSDate *firedate = notif.fireDate;
    [fireDates addObject:firedate];
}
NSArray *sortedFireDates= [fireDates sortedArrayUsingSelector:@selector(compare:)];

for (NSInteger i=0; i<self.notificationsArray.count; i++) 
{
    UILocalNotification *notif = [self.notificationsArray objectAtIndex:i];
    notif.applicationIconBadgeNumber=[sortedFireDates indexOfObject:notif.fireDate]+1;
}
[[UIApplication sharedApplication] setScheduledLocalNotifications:self.notificationsArray];
[fireDates release];
}

我在:

上调用此方法
-(void)applicationWillTerminate:(UIApplication *)application; 
-(void)applicationDidEnterBackground:(UIApplication *)application;
-(void)applicationWillResignActive:(UIApplication *)application;

在最后一个方法中,我也使application.applicationIconBadgeNumber = 0开始从0开始调整,因为在我的应用程序中,当用户打开应用程序时,这意味着他已经看到了通知。所以下次他关闭应用程序时,就不会有看不见的本地通知。

我希望这会节省一些时间。

答案 1 :(得分:0)

UILocalNotification中没有用于自动递增徽章编号的内置功能。您需要为每个通知提供徽章编号。