2016-02-11 5 views

risposta

-1

È possibile eseguire gli aggiornamenti dal metodo che si sta utilizzando per inviare la notifica.

3

Penso che non sia possibile sapere quando viene inviata la notifica locale principalmente perché è possibile pianificare la notifica locale o inviarla immediatamente in caso di app in background.

Secondo Apple:

si pianifica una notifica locale chiamando scheduleLocalNotification:. L'app utilizza la data dell'incendio specificata nell'oggetto UILocalNotification per il momento della consegna. In alternativa, è possibile presentare immediatamente la notifica chiamando il metodo presentLocalNotificationNow:.

Le app possono anche trovare utili le notifiche locali quando vengono eseguite in background e arrivano alcuni messaggi, dati o altri elementi che potrebbero essere di interesse per l'utente. In questo caso, un'app può presentare la notifica immediatamente utilizzando il metodo UIApplicationpresentLocalNotificationNow: (iOS fornisce a un'app un tempo limitato per l'esecuzione in background).

Non c'è modo di sapere quando è stato inviato il UILocalNotification, ma quando è stato ricevuto, ovviamente. Nel tuo caso suppongo che si desidera pianificare un UILocalNotification quindi cerchiamo di divisa per parti:

  • La notifica viene consegnato quando l'app non è aperto e il tocco dell'utente è

    Il delegato di un L'app iOS implementa il metodo application:didFinishLaunchingWithOptions: per gestire una notifica locale. Ottiene l'oggetto UILocalNotification associato dal dizionario delle opzioni di avvio utilizzando la chiave UIApplicationLaunchOptionsLocalNotificationKey. In questo modo puoi sapere dove è stata aperta l'app toccando lo UILocalNotification. Vedere il seguente codice:

    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 notifica viene consegnato quando l'applicazione è in esecuzione e il tocco dell'utente è

    volta che l'utente toccare la UILocalNotification si può gestire con il metodo didReceiveLocalNotification e fare tutto ciò vuoi dentro.

  • La notifica viene consegnato quando l'applicazione è in esecuzione e l'utente non toccare lo

Nel caso in cui l'utente non toccare l'UILocalNotification l'unica cosa che puoi fare per sapere se il tuo UILocalNotification è stato inviato è mantenere un elenco con il UILocalNotifications che hai programmato prima e controllare più tardi (questa non è una soluzione eccellente, ma il suo lavoro).

esistono tuttavia sempre la UIApplicationWillEnterForegroundNotification che può essere utilizzato per notificare al UIViewController si desidera aggiornare che l'applicazione entrerà in primo piano come in questo modo:

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) 
} 

Credo che bisogna pensare correttamente quello che ti serve da fare all'interno della tua app quando la tua notifica viene ricevuta nel caso in cui l'utente non la tocchi.

Spero che questo ti aiuti.

+0

Grazie così molto, penso di essere così vicino all'aggiornamento della vista quando l'utente non tocca la notifica ma entra nell'app dopo che la notifica è stata inviata. Ma sembra che ottengo "Notified ViewControllerB" ogni volta che apro l'app, e non solo dopo una notifica. Penso che sia perché non si deinit-correttamente o nel posto giusto nella mia app. –

+0

@ LudvigSørensen No, se il 'UIViewController' è ancora in memoria, verrai avvisato di ciò, solo quello. –

+0

ohh okay. Sto costruendo questa app per le sfide quotidiane, in cui un utente riceverà una sfida quotidiana e sarà quindi in grado di completarlo. La funzione che voglio eseguire subito dopo l'invio della notifica è una nuova funzione di recupero, in modo che la vista si aggiorni e fornisca all'utente una nuova sfida. Ma l'unico problema è che quando eseguo quella funzione nel codice che mi hai dato, la vista viene aggiornata ogni volta che l'utente rientra nell'app. E voglio solo aggiornare la vista quando arriva una nuova sfida. (ogni giorno) –

1

c'è un metodo per questo in Objective C, è possibile cercare il simile per rapida .. Aggiungi l'metodo nella AppDelegate

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

Penso che questo sarà aiutare ..

Problemi correlati