2016-02-11 9 views
5

Ich möchte Code ausführen, um die Viewcontroller zu aktualisieren, wenn meine lokale Benachrichtigung gesendet wurde, habe ich die Funktion didReceiveLocalNotification versucht, aber es funktioniert nur, wenn der Benutzer auf die Benachrichtigung klickt, fragte ich mich, ob es eine Möglichkeit zum Ausführen gab eine Funktion, wenn die Benachrichtigung versandt wurde?Gibt es eine Möglichkeit, Code auszuführen, wenn eine lokale Benachrichtigung gesendet wird?

Antwort

-1

Sie können Ihre Aktualisierungen mit der Methode durchführen, die Sie zum Senden der Benachrichtigung verwenden.

3

Ich denke, es gibt keine Möglichkeit zu wissen, wann Ihre lokale Benachrichtigung gesendet wird, hauptsächlich, weil Sie Ihre lokale Benachrichtigung planen oder sofort senden können, falls Ihre App im Hintergrund ist.

Nach Apple:

Sie planen eine lokale Benachrichtigung durch scheduleLocalNotification: aufrufen. Die App verwendet das im Objekt UILocalNotification angegebene Feuerdatum zum Zeitpunkt der Lieferung. Alternativ können Sie die Benachrichtigung sofort aufrufen, indem Sie die Methode presentLocalNotificationNow: aufrufen.

Apps finden möglicherweise auch lokale Benachrichtigungen nützlich, wenn sie im Hintergrund ausgeführt werden und einige Nachrichten, Daten oder andere Elemente ankommen, die für den Benutzer von Interesse sein könnten. In diesem Fall kann eine App die Benachrichtigung sofort mit der Methode UIApplicationpresentLocalNotificationNow: anzeigen (iOS gibt einer App eine begrenzte Zeit für die Ausführung im Hintergrund).

Es gibt keine Möglichkeit zu wissen, wann die UILocalNotification gesendet wurde, aber es, wenn es eingegangen ist einiger Fall natürlich. In Ihrem Fall nehme ich Ihnen einen UILocalNotification also lassen Sie uns durch Teile geteilt sind Scheduling:

  • Die Meldung abgegeben wird, wenn die App es für eine

    Der Delegierte nicht geöffnet und der Benutzer touch Die iOS-App implementiert die Methode application:didFinishLaunchingWithOptions:, um eine lokale Benachrichtigung zu verarbeiten. Er ruft das zugehörige Objekt UILocalNotification aus dem Launch-Options-Verzeichnis mit dem Schlüssel UIApplicationLaunchOptionsLocalNotificationKey ab. So können Sie wissen, wo die App geöffnet war, indem Sie die UILocalNotification berühren. Siehe den folgenden Code:

    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 
    } 
    
  • Die Meldung abgegeben wird, wenn die Anwendung ausgeführt wird und der Benutzer berühren

    Sobald der Benutzer berühren die UILocalNotification Sie damit umgehen kann die didReceiveLocalNotification Methode und tun was auch immer du willst drinnen sein.

  • Die Meldung abgegeben wird, wenn die Anwendung ausgeführt wird, und der Benutzer kann es nicht

Bei Berührung der Benutzer nicht die UILocalNotification das einzige, was berühren Sie tun können, zu wissen, ob Ihre UILocalNotification wurde gesendet, halten Sie eine Liste mit der UILocalNotifications, die Sie zuvor geplant haben und überprüfen Sie es später (das ist keine ausgezeichnete Lösung, aber seine Arbeit).

Dennoch existieren immer die UIApplicationWillEnterForegroundNotification, die verwendet werden können, die UIViewController Sie aktualisieren möchten, um mitzuteilen, dass die App im Vordergrund treten wird, wie auf diese Weise:

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

Ich glaube, Sie richtig zu denken, was Sie brauchen in Ihrer App zu tun, wenn Ihre Benachrichtigung erhalten wird, falls der Benutzer nicht auf sie tippen sollte.

Ich hoffe, das hilft Ihnen.

+0

Danke helfen so Ich denke, ich bin so kurz davor, die Ansicht zu aktualisieren, wenn der Benutzer nicht auf die Benachrichtigung klickt, sondern nach dem Senden der Benachrichtigung die App aufruft. Aber es scheint, dass ich jedes Mal, wenn ich die App öffne, "Notified ViewControllerB" bekomme und nicht erst nach einer Benachrichtigung. Ich denke, es liegt daran, dass es nicht richtig oder in meiner App richtig ist. –

+0

@ LudvigSørensen Nein, wenn der 'UIViewController' immer noch Speicher ist, wirst du darüber benachrichtigt, ist nur das. –

+0

ohh okay. Ich baue diese tägliche Herausforderung App, wo ein Benutzer eine tägliche Herausforderung bekommen und dann in der Lage sein wird, es zu vervollständigen. Die Funktion, die ich direkt nach dem Senden der Benachrichtigung ausführen möchte, ist eine Funktion zum Abrufen einer neuen Abfrage, so dass die Ansicht aktualisiert wird und dem Benutzer eine neue Herausforderung bietet. Aber das einzige Problem ist, dass wenn ich diese Funktion in dem Code ausführe, den Sie mir gegeben haben, wird die Ansicht jedes Mal aktualisiert, wenn der Benutzer die App erneut betritt. Und ich möchte nur die Ansicht aktualisieren, wenn eine neue Herausforderung eintrifft. (jeden Tag) –

1

Es gibt ein Verfahren für das in Objective-C, Sie für die ähnlich für die schnelle Suche kann .. Dieses Verfahren in Ihrem AppDelegate

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

ich denke, das ..

Verwandte Themen