Вопрос по uilocalnotification, date, iphone – Обновление даты запуска для локального уведомления и отмена предыдущего уведомления

5

Я знаю, что есть несколько вопросовВот а такжетам относительно того, как удалить локальное уведомление, которое может быть всем или определенным уведомлением. Я также прошел черезссылка на класс локального уведомления и нашел некоторые методы, такие как интервал времени повтора, дата срабатывания, тело оповещения, часовой пояс и т. д. ... но я не могу найти какую-либо информацию о том, как изменить уже установленную дату срабатывания. Скажите, если пользователь установил уведомление с датой сегодня и временем 16:50, но если пользователь желает изменить установленную дату / время, то происходит то, что уведомление срабатывает в обоих случаях. Что является ошибкой в отношении этики программирования!

На самом деле, я хочу, чтобы предыдущее уведомление было отменено, то есть дата должна быть изменена на отредактированную, и уведомление должно быть установлено и отправлено в новую дату.

Вот как я устанавливаю уведомление, пример кода:

- (void)setNotification
{
    //Set notification after confirmation of saved data

    Class cls = NSClassFromString(@"UILocalNotification");
    reminderNotification = [[cls alloc] init];

    if (cls != nil) 
    {        
       NSDateFormatter *dateFormat = [[[NSDateFormatter alloc]init]autorelease];
       [dateFormat setDateFormat:@"YYYY-MM-dd HH:mm:ss"];
       NSDate *notificationDate = [dateFormat dateFromString:textField2.text];
       reminderNotification.fireDate = notificationDate;
       reminderNotification.timeZone = [NSTimeZone defaultTimeZone];
       NSString *reminderText = [NSString stringWithFormat:@"%@ 's %@ on %@",textField.text,textField1.text,strDate];
       reminderNotification.alertBody = reminderText;
       reminderNotification.alertAction = @"View";
       reminderNotification.soundName = @"lazy_afternoon.mp3";
       reminderNotification.applicationIconBadgeNumber = 1;
       NSDictionary *userDict = [NSDictionary dictionaryWithObject:self.textField1.text forKey:kReminder];
       reminderNotification.userInfo = userDict;
       [[UIApplication sharedApplication] scheduleLocalNotification:reminderNotification];
       [reminderNotification release];
    }
}

Может ли кто-нибудь, пожалуйста, направить меня в правильном направлении, как справиться с этой задачей.

Спасибо всем заранее :)

Ваш Ответ

2   ответа
3

После того, как вы установили уведомление, единственный способ отредактировать его - это отменить старый и воссоздать другой, чтобы вы могли сделать это, выполнив поиск существующего и отменив его.

for(UILocalNotification *aNotif in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
        if([[aNotif.userInfo objectForKey:@"id"] isEqualToString:nId]) {
            [[UIApplication sharedApplication]cancelLocalNotification:aNotif];
        }
    }

А затем создайте новое уведомление.

Извините, я не могу понять, в чем здесь ключ, должен ли я создать идентификатор для каждого уведомления, если да, то как его настроить, пожалуйста, опишите меня, я новичок в локальных уведомлениях, посмотрите мой код о том, как я настраиваю уведомление, Спасибо :) Eshwar Chaitanya
Это просто, вам просто нужно иметь один уникальный ключ, который вы генерируете и сохраняете, и, используя его, вы можете уведомлять и использовать тот же ключ, чтобы отменить его. Если у вас есть одно уведомление, вы можете сохранить его в NSUserDefaults, в противном случае вам нужна база данных для несколько записей.
18

Use this method to schedule Notification , Where the notificationID has to be unique

 -(void) scheduleNotificationForDate:(NSDate *)date AlertBody:(NSString *)alertBody ActionButtonTitle:(NSString *)actionButtonTitle NotificationID:(NSString *)notificationID{

    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    localNotification.fireDate = date;
    localNotification.timeZone = [NSTimeZone localTimeZone];
    localNotification.alertBody = alertBody;
    localNotification.alertAction = actionButtonTitle;
    localNotification.soundName = @"yourSound.wav";

    NSDictionary *infoDict = [NSDictionary dictionaryWithObject:notificationID forKey:notificationID];
    localNotification.userInfo = infoDict;

    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}

Use this method to cancel Specific Notification with that Notification Id

- (void)cancelLocalNotification:(NSString*)notificationID {
    //loop through all scheduled notifications and cancel the one we're looking for
    UILocalNotification *cancelThisNotification = nil;
    BOOL hasNotification = NO;

    for (UILocalNotification *someNotification in [[UIApplication sharedApplication] scheduledLocalNotifications]) {
        if([[someNotification.userInfo objectForKey:notificationID] isEqualToString:notificationID]) {
            cancelThisNotification = someNotification;
            hasNotification = YES;
            break;
        }
    }
    if (hasNotification == YES) {
        NSLog(@"%@ ",cancelThisNotification);
        [[UIApplication sharedApplication] cancelLocalNotification:cancelThisNotification];        
    }
}

Reference : UILocalNotification

позвольте мне рассмотреть, что у вас есть содержимое fireDate и alertBody в методе [self scheduleNotification], поэтому вы можете переписать указанный выше метод как - (void) scheduleNotificationForNotificationID: (NSString *) messagesID; игнорируя те параметры, которые у вас уже есть, и вы можете использовать этот метод в кнопке сохранения как [self scheduleNotificationForNotificationID: @ & quot; yourUniqueId & quot;];
О, так вы хотите сказать, хотя я просто вызываю [self setNotification] и, не вызывая этот метод, я имею в виду метод void scheduleNotification, уведомление устанавливается Eshwar Chaitanya
да, и вам лучше изменить этот код NSDictionary * userDict = [NSDictionary dictionaryWithObject: self.textField1.text forKey: kReminder]; RemderNotification.userInfo = userDict; в вашем методе setNotification как этот NSDictionary * infoDict = [NSDictionary dictionaryWithObject: self.textField1.text forKey: self.textField1.text]; localNotification.userInfo = infoDict;
Поскольку мне нужно вызвать [self scheduleNotification] в действии кнопки сохранения, если я напишу это так, то как мне получить доступ ко всем этим переменным и поместить его в сам метод :( Eshwar Chaitanya
Одно небольшое сомнение, можно ли объявить Notification ID с помощью уведомления о расписании вместо того, чтобы помещать его в сам метод :) Eshwar Chaitanya

Похожие вопросы