2017-08-14 4 views
0

Je crée une notification locale dans l'un de mes ViewController.Comment planifier une notification locale qui se répète une seule fois dans iOS

UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 

Je définis l'heure planifiée après 30 secondes, à mes fins de test.

localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:30]; 

J'ai ajouté quelques autres propriétés pour la notification locale

localNotification.alertBody = @"Alert message"; 
    localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 
    localNotification.soundName = UILocalNotificationDefaultSoundName; 

Après tout ce que je planifie la notification.

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

Comme prévu, la notification a été déclenchée en 30 secondes.

Maintenant, ce dont j'ai besoin, c'est de répéter cette notification une fois de plus après une minute. C'est comme un temps de répétition prédéfini.

Si j'ajoute repeatInterval propriété, comme ci-dessous, il se déclenche à chaque minute.

localNotification.repeatInterval = NSCalendarUnitMinute; 

Y at-il un moyen d'atteindre ma cible?

En résumé, ce que je dois tirer est une notification locale fireDate valeur et une seule autre fois snooze pré défini même l'application en arrière-plan et téléphone est verrouillé.

Note: Veuillez ne pas suggérer de créer une autre notification locale pour cela.

+1

Vous devez programmer 2 notification avec la date d'incendie et un autre est firedate + 1 minute. Lorsque vous appuyez sur la notification, supprimez manuellement la seconde notification. Sinon, les deux notifications se déclenchent une par une à une date d'incendie spécifique. –

+0

Les notifications sont répétées ou non. Il n'y a pas de possibilité de spécifier un nombre de répétitions – Paulw11

+0

@YagneshDobariya Je pense que vous n'avez pas remarqué ma partie _Note_. Je recherche une option autre que celle-ci. – AnujAroshA

Répondre

-2

Vous devriez appeler une méthode après une minute du premier notification et cela déclenchera une autre fois notification.

[NSTimer scheduledTimerWithTimeInterval:60.0 
    target:self 
    selector:@selector(targetMethod:) 
    userInfo:nil 
    repeats:NO]; 
1

vous pouvez définir userInfo dans la notification,

NSMutableDictionary *payload = [NSMutableDictionary dictionary]; 
payload[@"repeat"] = [NSNumber numberWithBool:YES]; 
payload[@"interval"] = @(1.0); 

après la notification de réglage, ajouter des informations utilisateur à elle

.... 
localNotification.alertBody = @"Alert message"; 
localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
.... 
localNotification.userInfo = payload; 

et didReceiveLocalNotification méthode déléguée

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 
    NSDictionary *dict = [notification userInfo]; 
    BOOL repeat = [dict[@"repeat"] boolValue]; 
    if (repeat) { 
      //update firedate and schedule notification 
    } 
} 
+0

Solution intelligente. –

+0

@Akhilrajtr J'ai déjà essayé cette alternative. Cela ne fonctionnera pas lorsque le téléphone est verrouillé. Ce qui signifie que la méthode didReceiveLocalNotification doit être déclenchée, que l'application soit en premier plan ou que l'utilisateur doive appuyer sur la première alerte de notification. – AnujAroshA

+0

@AnujAroshA ohk. dans ce cas, je ne peux penser à aucune autre solution que d'ajouter 2 notifications. peut-être quelqu'un ici peut aider. bonne chance. – Akhilrajtr

0

0

@ La solution d'Akhilrajtr est presque correcte.

Vous pouvez mettre à jour les informations utilisateur de la notification et les gérer dans didReceiveLocalNotification. Et en plus de cela, vous devez enregistrer les paramètres de notification.

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationActivationModeBackground | UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil]; 
    [application registerUserNotificationSettings:settings]; 
    return YES; 
} 

NB: UIUserNotificationSettings est obsolète dans iOS 10. Utilisation UNNotificationSettings place.

Solution:

1.Add userInfo à la notification Objet

localNotification.userInfo = @{@"repeat" : @(YES), @"interval" : @(1.f)}; 

2.Update l'heure prévue dans didReceiveLocalNotification