I Alarm Anwendung tue, in meiner Anwendung i UILocalNotification gefeuert haben damit Wiederholungsintervall wird mit (Ebenso: Jeder Tag, Wochentag, .. etc.), Nach dem Abfeuern annulliere ich alle Benachrichtigung und Neuterminierung der alle Benachrichtigung erneut, aber die gleiche Benachrichtigung, die bereits gefeuert wird wieder statt es sollte kommen für seine zukünftige Zeit, die es nächste Feuerdatum hat, aber es kommt wieder .abbrechen und Neuterminierung UILocalNotification mit Wiederholungsintervall feuert wieder
Mein Code:
-(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];
}
- Sag mir, wenn ich etwas fehlt
Vielen Dank im Voraus!
Sie sollten eine eindeutige ID übergeben, um die Benachrichtigung abzubrechen. – salmancs43
Ja, ich habe das getan, aber das ist auch Abbrechen der Zukunft Wiederholungsbenachrichtigungen –
Als Ihre ID ist nicht eindeutig. Generieren Sie eine eindeutige ID und weisen Sie sie beim Speichern des Alarms im Info-Wörterbuch zu. – salmancs43