2014-12-12 3 views
0

В моем приложении iam с использованием UILocalNotifications.Но мое требование - я хочу отменить дублирующее уведомление.Как избежать дублирования UILocalNotification в ios?

Вот мой код .....

-(void)LocalNotificationMethod{ 
    NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 

    // Get the current date 
    NSDate *pickerDate = self.selectedDate; 
    NSLog(@" self.selectedDate %@", self.selectedDate); 
    // Break the date up into components 
    NSDateComponents *dateComponents = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) 
                fromDate:pickerDate]; 
    NSDateComponents *timeComponents = [calendar components:(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) 
                fromDate:pickerDate]; 

    // Set up the fire time 
    NSDateComponents *dateComps = [[NSDateComponents alloc] init]; 
    [dateComps setDay:[dateComponents day]]; 
    [dateComps setMonth:[dateComponents month]]; 
    [dateComps setYear:[dateComponents year]]; 
    [dateComps setHour:[timeComponents hour]]; 
    // Notification will fire in one minute 
    [dateComps setMinute:[timeComponents minute]]; 
    [dateComps setSecond:[timeComponents second]]; 
    NSDate *itemDate = [calendar dateFromComponents:dateComps]; 

    NSLog(@"itemDate %@",itemDate); 
    UILocalNotification *localNotif = [[UILocalNotification alloc] init]; 
    if (localNotif == nil) 
     return; 
    localNotif.fireDate = itemDate; 
     NSLog(@"itemDate %@", localNotif.fireDate); 
    localNotif.timeZone = [NSTimeZone defaultTimeZone]; 

    // Notification details 
    localNotif.alertBody = [_titleTextFieldObj text]; 
    // Set the action button 
    localNotif.alertAction = @"View"; 

    localNotif.soundName = UILocalNotificationDefaultSoundName; 
    localNotif.applicationIconBadgeNumber =[[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 

    NSLog(@" localNotif.applicationIconBadgeNumber ++ %ld", (long)localNotif.applicationIconBadgeNumber); 



    // Specify custom data for the notification 
    NSDictionary *infoDict = [NSDictionary dictionaryWithObject:[_titleTextFieldObj text] forKey:@"someKey"]; 

    localNotif.userInfo = infoDict; 
    NSArray *notificationArray = [[UIApplication sharedApplication] scheduledLocalNotifications]; 
    //UILocalNotification *notif = [notificationArray objectAtIndex:indexPath.row]; 
    NSLog(@"notif %@",notificationArray); 


    [[UIApplication sharedApplication] scheduleLocalNotification:localNotif]; 


    } 

Я новичок в Objective-C не знаю куда писать код, чтобы не позволить дублировать notifications.Can кто-нибудь пожалуйста, помогите мне решить это.

Заранее спасибо ..

ответ

1

Местное уведомление имеет userInfo свойство, которое вы можете использовать, чтобы поставить некоторые пользовательские данные и могут быть использованы для пары ваших уведомлений. Я предлагаю вам использовать эту информацию для вставки NSDictionary, включая тип вашего уведомления. Например:

NSString *newNotificationType = @"my_notification"; 
newNotification.userInfo = @{@"notification_type_key":newNotificationType}; 

Затем после того, как вы реализуете это вы можете создать чек, если этот тип уведомления уже существует, и либо отменить предыдущий или отменить создание новой:

for(UILocalNotification *notification in [[UIApplication sharedApplication] scheduledLocalNotifications]) 
{ 
    NSDictionary *userInfo = notification.userInfo; 
    if([userInfo isKindOfClass:[NSDictionary class]] && [userInfo[@"notification_type_key"] isEqualToString:newNotificationType]) 
    { 
     [[UIApplication sharedApplication] cancelLocalNotification:notification]; 
    } 
} 
+0

Что о том, когда вы установили интервал повторения уведомлений, чтобы повторять каждый час или каждый день/и т. д. ?? Это покажет одно и то же уведомление снова и снова, что является ХОРОШИМ .... но .... есть ли способ автоматически удалять/отклонять старые уведомления при публикации нового повтора? – Supertecnoboff

+0

Я никогда не использовал это, но не мог ли вы просто удалить старые повторяющиеся уведомления и создать новый? Возможно, вы могли бы отменить уведомление, затем изменить одно и то же уведомление и снова запланировать тот же объект уведомления, который теперь изменил значения. –

+0

Я вижу, что вы говорите, но это, если приложение работает. Как насчет того, когда пользователь устанавливает уведомление для повторения и затем закрывает приложение? Затем уведомление продолжает повторяться (это то, что я хочу), но центр уведомлений заканчивается длинным списком повторяющихся уведомлений. Должен быть способ автоматического удаления повторяющихся уведомлений (и просто сохранить последний). – Supertecnoboff

Смежные вопросы