У меня есть проблема с моим UILocalNotification.
Я планирую уведомление со своим методом.
- (void) sendNewNoteLocalReminder:(NSDate *)date alrt:(NSString *)title
{
// some code ...
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertAction = NSLocalizedString(@"View Details", nil);
localNotif.alertBody = title;
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 0;
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:stringID forKey:@"id"];
localNotif.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];
}
Его прекрасная работа и я правильно получаю уведомление. Проблема состоит в том, когда я должен отменить уведомление. Я использую этот метод.
- (void) deleteNewNoteLocalReminder:(NSString*) reminderID noteIDe:(NSInteger)noteIDE
{
[[UIApplication sharedApplication] cancelLocalNotification:(UILocalNotification *)notification ????
}
Я не уверен, что сделать здесь, но мои вопросы:
Как я знаю, который UILocalNotification возражают, что я должен удалить?
Существует ли способ перечислить все уведомления?
Единственной вещью, которую я имею, является идентификатор, которого напоминания я должен удалить.
Я думал собирающийся сохранить объект UILocalNotification в моем "Примечании", возражают и получают его тот путь, и когда я сохраняющий к моей базе данных SQLite сериализирую объект, и так далее... там более умный путь?
Вы можете получить список всех запланированных уведомлений из scheduleLocalNotifications или отменить их все:
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Мое решение - архивировать объект UILocalNotification, который вы запланировали с помощью NSKeyedArchiver, и хранить его где-нибудь (предпочтительно в plist). А затем, когда вы захотите, вы сможете отменить уведомление, найти в plist нужные данные и использовать NSKeyedUnarchiver для разархивации. Код довольно прост:
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notice];
и
UILocalNotification *notice = [NSKeyedUnarchiver unarchiveObjectWithData:data];
Мое решение - это вы, когда вы создаете UILocalNotification
, тогда вы создаете один NSMutableDictionary
и сохраняете это уведомление как значение ключа в качестве вашего идентификатора и помещаете это NSMutableDictionay
на ваш NSUserDefaults
. Поэтому, когда вы хотите отменить какое-либо конкретное локальное уведомление в это время, вы пишете
[словарь valueforkey @ "KEY"]
где в качестве ключа вы передаете свой идентификатор, чтобы получить это конкретное локальное уведомление и передать его на
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];