Comment puis-je créer et annuler unique UILocalNotification d'une classe personnalisée?
Actuellement, j'ai un minuteur avec alarme (notification locale).
Je veux créer une classe timer à partir de ce code pour créer plusieurs minuteries et les notifications (au maximum 5) et j'ai du mal avec la façon de créer et annuler unique notifications avec une méthode de classe.
- (UILocalNotification *) startAlarm {
[self cancelAlarm]; //clear any previous alarms
alarm = [[UILocalNotification alloc] init];
alarm.alertBody = @"alert msg"
alarm.fireDate = [NSDate dateWithTimeInterval: alarmDuration sinceDate: startTime];
alarm.soundName = UILocalNotificationDefaultSoundName;
[[UIApplication sharedApplication] scheduleLocalNotification:alarm];
}
Mon hypothèse est que si j'ai une méthode de la classe qui crée un UILocalNotification appelé "alarme" iOS voir toutes les notifications comme étant de la même notification et la méthode suivante fonctionne pas comme je le veux:
- (void)cancelAlarm {
if (alarm) {
[[UIApplication sharedApplication] cancelLocalNotification:alarm];
}
}
J'ai donc besoin d'une façon de nommer ces UILocalNotifications comme ils sont créés par ex. alarm1 alarm2...alarm5 donc je peut annuler le droit de l'un.
Merci d'avance.
Merci, je vais vous donner que d'essayer.
OriginalL'auteur Michael Campsall | 2012-02-10
Vous devez vous connecter pour publier un commentaire.
La réponse à votre problème se trouve dans le
userInfo
dictionnaire paramètre que chaqueUILocalNotification
. Vous pouvez définir des valeurs pour les touches dans ce dictionnaire pour identifier la notification.Pour mettre en œuvre cette facilement tout ce que vous avez à faire est d'avoir votre classe timer avoir un
NSString
propriété "nom". Parmi l'ensemble de la classe string pour la clé de cette valeur. Voici un exemple de base en fonction de votre code:Cette mise en œuvre devrait être relativement explicites. Fondamentalement, quand une instance de la classe timer a
-scheduleAlarm
appelé et il est la création d'une nouvelle notification, il la met dans la chaîne de propriété "nom" comme valeur pour lekTimerNameKey
. Ainsi, lorsque cette instance appels-cancelAlarm
il énumère le tableau de notifications à la recherche d'une notification portant son nom pour cette clé. Et s'il en trouve un, il le supprime.J'imagine votre prochaine question sera de savoir comment donner à chacun de vos minuteries nom de la propriété d'une chaîne unique. Depuis que je sais que vous êtes en utilisant de l'IB à instancier (à partir de votre autre question sur le sujet), vous auriez probablement le faire dans
viewDidLoad
quelque chose comme:Vous pouvez également lier le nom de la propriété avec une étiquette du titre que vous pouvez avoir.
Content d'avoir pu aider. Pour répondre à votre question de savoir pourquoi il était nécessaire de copier le
scheduledLocalNotifications
, il n'est pas. Ceci est un exemple de ma paranoïa extrême. Si apple jamais expose interneNSMutableArray
de notifications, que ce soit par le biais d'un changement de politique (donc peu probable c'est risible) ou un bug, cette copie serait d'éviter d'éventuels problèmes. Mais encore une fois si vous ne vous ne sera probablement jamais voir une différence.Lorsque vous mettez
dictionaryWithObject:self.name
- comment pouvez-vous changerself.name
à un IDENTIFIANT unique?OriginalL'auteur NJones