2012-04-18 10 views
1

アプリケーションのバッジ番号で今日の日付を表示しようとしていますが、アプリケーションがローカル通知を発行したときにこの日付を更新する必要がありますが、ローカル通知によって日付が更新されないという問題があります。プロジェクトが作成された日の日付のみを表示します。ここに私のコードです:ローカル通知を更新するBadgeNumber

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

    } 
+0

このコードを実行すると、通知がスケジュールされた日付を表示する必要があります。その時刻に一度だけスケジュールしたのでしょうか? –

+0

通知は毎日更新され、日付が更新されます!私は25時間ごとに通知をスケジュールしました!現在の日付を取得する –

+0

ソリューションplzを見つけましたか?私はいくつかのアプリで同じ考えを達成したい..ありがとう – hafedh

答えて

1

この1つの通知のみをスケジュールしますか?通知が発生すると、コードは実行されません。あなたのアプリが開いている場合は、通知を処理することができ、ユーザーがあなたの通知に対して行動を取った場合、再びそれを処理する機会が与えられます。

この通知は、バッジ番号を特定の日番号に設定するようにプログラムされています。その数は固定数です。通知が送信されたときには自動的に変更されません。

アプリケーションバッジは、未処理の通知(as per the Human Interface Guidelines)を表示するように設計されているため、日付を表示するのに最適な場所ではない場合があります。また、app store review guidelinesを見ると、ヒューマンインタフェースガイドラインに記載されていない方法でシステム提供のアイテムを使用するアプリは、アプリストアから拒否される可能性があります。

このパスを続けている場合は、Local Notification Programming Guideを参照してください。それは、各アプリが64ローカル通知をスケジュールすることができ、バッジ番号を翌日に更新するために毎日1つをスケジュールする必要があることを示しています。つまり、ユーザーが65日間アプリを開かないと、バッジ番号が間違っていて、ユーザーのアラートにローカル通知が残っていないことを意味します。

-1

ちょうど

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

事はapplicationIconBadgeNumberは、あなたが通知を作成する時に事前に決定されなければならないことである...ちょうどこのように、あなたのnotification.applicationIconBadgeNumberためcomponentsForFireDateから日を取得します。 [NSDate date]から日を取得した場合は、通知が発生した日ではなく、通知を作成した日が表示されます。