我使用localNotification制作了生日提醒应用程序。
它读取了AddressBook&的联系人。找出那天(今天)的生日清单。
我每天都在使用localNotification.repeatinterval(NSDayCalenderUnit)重复此应用。
这对我来说很好。
当我第一次收到通知时,它的徽章号码是1(没问题),但如果我关闭通知&让应用程序在后台运行我在第二天收到另一个通知。(然后它的徽章不应该是2)。
所以请指导我怎样才能增加这个徽章。当我的应用在后台运行时关闭通知时计算。
我不知道应用程序何时通过localNotification.repeatinterval在后台运行,如果触发了该方法。
我将不胜感激。
答案 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中没有用于自动递增徽章编号的内置功能。您需要为每个通知提供徽章编号。