1

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

- (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];

    }
4

2 回答 2

1

您是否只安排这一项通知?当通知触发时,它们不会运行任何代码。如果您的应用程序已打开,您可以处理通知,如果用户对您的通知采取行动,您将再次有机会处理它。

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

应用程序徽章旨在显示许多未处理的通知(根据人机界面指南),因此可能不是显示日期的最佳位置。此外,如果您查看应用商店审查指南,任何以人机界面指南中未描述的方式使用系统提供的项目的应用都可能被应用商店拒绝。

如果您继续沿着这条路走,那么您可能需要查看本地通知编程指南。它显示每个应用程序可以安排 64 个本地通知,并且您需要每天安排一个以将徽章编号更新到第二天。这意味着如果用户 65 天未打开您的应用程序,则徽章编号将是错误的,并且您也将没有本地通知留给用户警报。

于 2012-04-18T16:38:13.417 回答
-1

只是从componentsForFireDate你的一天开始notification.applicationIconBadgeNumber,就像这样......

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

问题是applicationIconBadgeNumber必须在您创建通知时预先确定。如果您从 获取日期[NSDate date],它将显示您创建通知的日期,而不是通知触发的日期。

于 2012-05-03T08:57:45.080 回答