¿Hay alguna forma de ejecutar algún código cuando se envía una notificación local?

Quiero ejecutar un código para actualizar el viewcontroller cuando se envió mi notificación local, he intentado la function didReceiveLocalNotification , pero solo funciona cuando el usuario hace clic en la notificación, me preguntaba si había una forma de ejecutar una function ¿Cuándo se envió la notificación?

Creo que no hay manera de saber cuándo se envía su notificación local, principalmente porque puede progtwigr su notificación local o enviarla de inmediato en caso de que su aplicación esté en segundo plano.

De acuerdo con Apple :

Usted progtwig una notificación local llamando a scheduleLocalNotification: La aplicación utiliza la date de disparo especificada en el object UILocalNotification para el momento de la entrega. Alternativamente, puede presentar la notificación inmediatamente llamando al método presentLocalNotificationNow:

Las aplicaciones también pueden encontrar notifications locales útiles cuando se ejecutan en segundo plano y llega algún post, datos u otro elemento que pueda ser de interés para el usuario. En este caso, una aplicación puede presentar la notificación de inmediato utilizando el método UIApplication presentLocalNotificationNow: (iOS le da a la aplicación un time limitado para ejecutarse en segundo plano).

No hay forma de saber cuándo se envió el UILocalNotification , pero cuando lo recibió, es cierto, por supuesto. En su caso, supongo que está progtwigndo una UILocalNotification así que UILocalNotification por partes:

  • La notificación se entrega cuando la aplicación no está abierta y el usuario la toca

    El delegado de una aplicación de iOS implementa la application:didFinishLaunchingWithOptions: método para manejar una notificación local. Obtiene el object UILocalNotification asociado del dictionary de opciones de inicio mediante la key UIApplicationLaunchOptionsLocalNotificationKey . Para saber dónde está abierta la aplicación, toca UILocalNotification . Vea el siguiente código:

     func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { if let launchNotification = launchOptions?[UIApplicationLaunchOptionsLocalNotificationKey] as? UILocalNotification { // do anything you want update UIViewController, etc } return true } 
  • La notificación se entrega cuando la aplicación se está ejecutando y el usuario la toca.

    Una vez que el usuario toque UILocalNotification , puede manejarlo usando el método didReceiveLocalNotification y hacer lo que quiera dentro de él.

  • La notificación se entrega cuando la aplicación se está ejecutando y el usuario no la toca.

En caso de que el usuario no toque la UILocalNotification lo único que puede hacer para saber si su UILocalNotification fue enviada es mantener una list con UILocalNotifications que ha progtwigdo antes y verificarla más tarde (esta no es una solución excelente pero sí su trabajo).

Sin embargo, siempre existe el UIApplicationWillEnterForegroundNotification que se puede utilizar para notificar al UIViewController que desea actualizar que la aplicación ingresará en primer plano de esta forma:

 private var foregroundNotification: NSObjectProtocol! override func viewDidLoad() { super.viewDidLoad() foregroundNotification = NSNotificationCenter.defaultCenter().addObserverForName(UIApplicationWillEnterForegroundNotification, object: nil, queue: NSOperationQueue.mainQueue()) { [unowned self] notification in print("Notified ViewControllerB") } } deinit { // make sure to remove the observer when this view controller is dismissed/deallocated NSNotificationCenter.defaultCenter().removeObserver(foregroundNotification) } 

Creo que tienes que pensar correctamente en lo que necesitas hacer dentro de ti cuando recibes tu notificación en caso de que el usuario no la toque.

Espero que esto te ayude.

Hay un método para esto en el objective c, puede search el similar para swift … Agregue este método en su appdelegate

 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions UNNotificationPresentationOptionBadge))completionHandler{ [self.tableview reloadData]; } 

Creo que esto ayudará.

Puede realizar sus actualizaciones desde el método que está utilizando para enviar la notificación.