我正在做警报应用程序,在我的应用程序中我已经解雇了 UILocalNotification与它有重复间隔(同样:每一个 一天,工作日,等等),在解雇之后我取消所有 通知并重新安排所有通知,但相同 已经被解雇的通知将再次出现,而不应该 来到它未来的时间,它有下一个火灾日期,但它的到来 试。
我的代码:
-(void) setAlarmNotification:(NSDictionary *)dictionaryForAlarm {
UILocalNotification *localNotification = [[UILocalNotification alloc]init];
[localNotification setUserInfo:dictionaryForAlarm];
[localNotification setAlertBody:[NSString stringWithFormat:kDefaultNotificationMessage]];
[localNotification setSoundName:[NSString stringWithFormat:@"%@.%@",[dictionaryForAlarm objectForKey:kAlarmSoundName],[[GlobalClass getSoundDetails:[dictionaryForAlarm objectForKey:kAlarmSoundName]] objectForKey:kSoundExtention]]];
[localNotification setTimeZone:[NSTimeZone localTimeZone]];
// setting weather to provide snooze option or not
if([[dictionaryForAlarm objectForKey:kAlarmSnooze] integerValue]){
[localNotification setCategory:kNotificationCategoryIdentity];
}
// Set Notification with repeat/ also check its not firing the snooze notification
if(([[dictionaryForAlarm objectForKey:kAlarmRepeatState] intValue] == ALARMREPEATSTATEE_ON) && ([[dictionaryForAlarm objectForKey:kAlarmSnoozeState] intValue] == ALARMSNOOZESTATE_OFF)){
NSString *stringForRepetAlarmDays = [dictionaryForAlarm objectForKey:kAlarmRepeat];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *componentsForFireDate = [calendar components:(NSCalendarUnitYear | NSCalendarUnitWeekOfYear | NSCalendarUnitHour | NSCalendarUnitMinute| NSCalendarUnitSecond | NSCalendarUnitWeekday) fromDate: [dictionaryForAlarm objectForKey:kAlarmSnoozeDate]];
if([stringForRepetAlarmDays intValue] == REPEATALARM_ALL){
// every day
localNotification.repeatInterval = NSCalendarUnitDay;
localNotification.fireDate=[calendar dateFromComponents:componentsForFireDate];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[self repetativeLocalnotificationDictionary:dictionaryForAlarm andFireDate:[calendar dateFromComponents:componentsForFireDate] withRepeatInterval:NSCalendarUnitDay isForSnooze:NO];
}else{
NSArray *arrayForRepeatDays = [stringForRepetAlarmDays componentsSeparatedByString:@","]; // geting the days array @"1,2,3.." => [@"1",@"2",.]
if(arrayForRepeatDays.count > 1){
// custom days
for (NSString *dayOfWeek in arrayForRepeatDays) {
// Creating multiple objects for each day to fire //$$$$$
UILocalNotification *localNotificationRepeat = [[UILocalNotification alloc]init];
[localNotificationRepeat setUserInfo:dictionaryForAlarm];
[localNotificationRepeat setAlertBody:[NSString stringWithFormat:kDefaultNotificationMessage]];
[localNotificationRepeat setSoundName:[NSString stringWithFormat:@"%@.%@",[dictionaryForAlarm objectForKey:kAlarmSoundName],[[GlobalClass getSoundDetails:[dictionaryForAlarm objectForKey:kAlarmSoundName]] objectForKey:kSoundExtention]]];
[localNotificationRepeat setTimeZone:[NSTimeZone localTimeZone]];
// setting weather to provide snooze option or not
if([[dictionaryForAlarm objectForKey:kAlarmSnooze] integerValue]){
[localNotificationRepeat setCategory:kNotificationCategoryIdentity];
}
[componentsForFireDate setWeekday:[dayOfWeek integerValue]];
localNotificationRepeat.repeatInterval = NSCalendarUnitWeekOfYear;;
localNotificationRepeat.fireDate=[calendar dateFromComponents:componentsForFireDate];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotificationRepeat];
[self repetativeLocalnotificationDictionary:dictionaryForAlarm andFireDate:[calendar dateFromComponents:componentsForFireDate] withRepeatInterval:NSCalendarUnitWeekOfYear isForSnooze:NO];
}
}else{
// single repeat
[componentsForFireDate setWeekday: [arrayForRepeatDays[0] intValue]] ;
localNotification.repeatInterval = NSCalendarUnitWeekOfYear;
localNotification.fireDate=[calendar dateFromComponents:componentsForFireDate];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[self repetativeLocalnotificationDictionary:dictionaryForAlarm andFireDate:[calendar dateFromComponents:componentsForFireDate] withRepeatInterval:NSCalendarUnitWeekOfYear isForSnooze:NO];
}
}
}else{
[localNotification setFireDate:[dictionaryForAlarm objectForKey:kAlarmSnoozeDate]];
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[self repetativeLocalnotificationDictionary:dictionaryForAlarm andFireDate:[dictionaryForAlarm objectForKey:kAlarmSnoozeDate] withRepeatInterval:NSCalendarUnitDay isForSnooze:NO];
}
}
- (void)cancelAlarmNotification:(NSString *)stringForNotificationID {
UIApplication *app = [UIApplication sharedApplication];
NSArray *arrayForNotifications = [app scheduledLocalNotifications];
for (int i=0; i<[arrayForNotifications count]; i++)
{
UILocalNotification* localNotification = [arrayForNotifications objectAtIndex:i];
if ([[localNotification.userInfo valueForKey:kAlarmID] isEqualToString:stringForNotificationID])
{
//Cancelling local notification
[app cancelLocalNotification:localNotification];
}
}
}
-(void)repetativeLocalnotificationDictionary:(NSDictionary *) notificationInfo andFireDate:(NSDate *)fireDate withRepeatInterval:(NSCalendarUnit) repeatInterval isForSnooze:(BOOL) fromSnooze {
UILocalNotification *repeatNotification = [[UILocalNotification alloc]init];
[repeatNotification setFireDate:[NSDate dateWithTimeInterval:kDefaultImmediateNotificationTime sinceDate:fireDate]];
[repeatNotification setUserInfo:notificationInfo];
[repeatNotification setAlertBody:[NSString stringWithFormat:kDefaultNotificationMessage]];
[repeatNotification setSoundName:[NSString stringWithFormat:@"%@.%@",[notificationInfo objectForKey:kAlarmSoundName],[[GlobalClass getSoundDetails:[notificationInfo objectForKey:kAlarmSoundName]] objectForKey:kSoundExtention]]];
[repeatNotification setTimeZone:[NSTimeZone localTimeZone]];
[repeatNotification setRepeatInterval:repeatInterval];
// setting weather to provide snooze option or not
if([[notificationInfo objectForKey:kAlarmSnooze] integerValue]){
[repeatNotification setCategory:kNotificationCategoryIdentity];
}
[[UIApplication sharedApplication] scheduleLocalNotification:repeatNotification];
}
提前谢谢你!
答案 0 :(得分:0)
这是每天发布通知的代码。
-(void) scheduleLocalNotificationDaily:(NSDate *)fireDate
{
NSDictionary * infoDict = @{
@"alarmUiqueId" : uID,
};
NSDateComponents *comp = [[NSCalendar currentCalendar] components:NSCalendarUnitSecond
fromDate:fireDate];
fireDate = [fireDate dateByAddingTimeInterval:-comp.second];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = fireDate;
localNotif.timeZone = [NSTimeZone localTimeZone];
localNotif.alertBody = @"Time to wake Up";
localNotif.alertAction = @"Show me";
localNotif.soundName = @"3D bird tone.mp3";
localNotif.userInfo = infoDict;
localNotif.repeatInterval = NSCalendarUnitDay;
NSLog(@" date %lu",kCFCalendarUnitDay);
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}
以及在交换机或其他地方取消此特定通知。
for(UILocalNotification *notification in notificationArray)
{
NSLog(@"%@",[notification.userInfo valueForKey:@"alarmUiqueId"]);
NSLog(@"%@",alrm.uniqueId);
if ([[notification.userInfo valueForKey:@"alarmUiqueId" ] isEqualToNumber: alrm.uniqueId])
{
[[UIApplication sharedApplication] cancelLocalNotification:notification ] ;
}
}