私はアラームアプリを作成しています。ここでは、日付と時刻のイベントを作成し、火事の日付を選択することで通知する必要があります今、5,15,30分前など)と繰り返し間隔(決して、毎日、毎週、毎月、毎年)を繰り返します。問題は、ユーザーがイベントを作成したときに、すでにイベントが発生している(たとえば、イベントが4月10日に発生し、今日が4月16日である場合など)、このイベントについて正しい時間内に通知する必要がありますが、それ。だから、起こってはならない。どうすればこれを避けることができますか?ここ は、ユーザーが任意の繰り返し間隔を選択していない場合にのみ、このバグが発生した通知過去に既に発生したイベントのローカル通知
- (void)notificationWithNote:(Note *)scheduledNote deleteThisNotification:(BOOL)deleteNotification {
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
unsigned int unitFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit;
NSDateComponents *comp = [calendar components:unitFlags fromDate:scheduledNote.date];
ToDoItem *todoitem = [[ToDoItem alloc] init];
todoitem.day = [comp day];
todoitem.month = [comp month];
todoitem.year = [comp year];
todoitem.hour = [comp hour];
todoitem.minute = [comp minute];
todoitem.eventName = scheduledNote.event;
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:todoitem.day];
[dateComps setMonth:todoitem.month];
[dateComps setYear:todoitem.year];
[dateComps setHour:todoitem.hour];
[dateComps setMinute:todoitem.minute];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
[dateComps release];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
if ([scheduledNote.remindTime intValue] == 1)
localNotif.fireDate = itemDate;
else
localNotif.fireDate = [itemDate dateByAddingTimeInterval:-([scheduledNote.remindTime intValue]*60)];
switch ([scheduledNote.repeatOption intValue]) {
case 0:
localNotif.repeatInterval = 0;
break;
case 1:
localNotif.repeatInterval = NSDayCalendarUnit;
break;
case 2:
localNotif.repeatInterval = NSWeekCalendarUnit;
break;
case 3:
localNotif.repeatInterval = NSMonthCalendarUnit;
break;
case 4:
localNotif.repeatInterval = NSYearCalendarUnit;
break;
default:
break;
}
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"%@ begins", nil), scheduledNote.event];
localNotif.alertAction = NSLocalizedString(@"View Details", nil);
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;
NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:todoitem.eventName,ToDoItemKey, @"Timenote is coming", MessageTitleKey, nil];
localNotif.userInfo = infoDict;
if (deleteNotification)
[[UIApplication sharedApplication] cancelLocalNotification:localNotif];
else
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
NSLog(@"fire date: %@",[localNotif.fireDate description]);
[todoitem release];
[localNotif release];
}
を作成する方法、です。イベントが毎日、毎週、毎月、または毎年繰り返される場合は、時間通りに表示されます。だから問題は実際の場合ですlocalNotif.repeatInterval == 0