更新本地通知BadgeNumber

时间:2012-04-18 10:22:15

标签: iphone objective-c ios xcode ipad

我正在尝试使用应用程序徽章编号显示今天的日期,应用程序触发本地通知时应更新此日期,但问题是本地通知不会更新日期!并仅显示我的项目创建日期的日期!这是我的代码:

- (void) viewDidLoad {

[self notification];

}

    - (void) notification  {


        NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
        NSDate *now = [NSDate date];    
        NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit ) fromDate: now];

        [componentsForFireDate year];
        [componentsForFireDate month];
        [componentsForFireDate day];
        [componentsForFireDate setHour:1];
        [componentsForFireDate setMinute:2];
        [componentsForFireDate setSecond:1];

        NSDate *fireDateOfNotification = [calendar dateFromComponents: componentsForFireDate];

                UILocalNotification *notification = [[UILocalNotification alloc]init];
                notification.fireDate = fireDateOfNotification;
                notification.timeZone = [NSTimeZone localTimeZone];                    notification.repeatInterval= NSDayCalendarUnit; 


                NSString *date = [self showGregorianFullDate];

                notification.alertAction = @"View";
                notification.soundName = UILocalNotificationDefaultSoundName;


        //updating badge number :

                NSCalendar* Calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
                NSDateComponents *Components = [Calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit )fromDate:[NSDate date]];

                int a = [Components day];
                notification.applicationIconBadgeNumber = a; 

            [[UIApplication sharedApplication] scheduleLocalNotification:notification];

    }

2 个答案:

答案 0 :(得分:1)

你只安排这个通知吗?当通知触发时,他们无法运行任何代码。如果您的应用程序已打开,您可以处理通知,如果用户对您的通知采取了措施,您将再次有机会处理该通知。

此通知编程为将徽章编号设置为某个日期编号。这个数字是固定数字。通知被触发后,它不会自动更改。

应用程序徽章旨在显示许多未处理的通知(as per the Human Interface Guidelines),因此可能不是显示日期的最佳位置。此外,如果您查看app store review guidelines任何以人工界面未描述的方式使用系统提供的项目的应用程序可能会从应用程序商店中拒绝。

如果您沿着这条路走下去,那么您可能需要查看Local Notification Programming Guide。它显示每个应用程序可以安排64个本地通知,并且您需要每天安排一个将徽章编号更新到第二天。这意味着如果用户未在65天内打开您的应用,则徽章编号将出错,并且您还没有留下用户警报的本地通知。

答案 1 :(得分:-1)

componentsForFireDate获取notification.applicationIconBadgeNumber的日期,就像这样......

//updating badge number :
        int a = [componentsForFireDate day];
        notification.applicationIconBadgeNumber = a; 

问题在于,在创建通知时必须预先确定applicationIconBadgeNumber。如果您从[NSDate date]获得该日期,则会显示您创建通知的那一天,而不是通知触发的日期。