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
Sie können Ihre Aktualisierungen mit der Methode durchführen, die Sie zum Senden der Benachrichtigung verwenden.
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 ObjektUILocalNotification
angegebene Feuerdatum zum Zeitpunkt der Lieferung. Alternativ können Sie die Benachrichtigung sofort aufrufen, indem Sie die MethodepresentLocalNotificationNow:
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
UIApplication
presentLocalNotificationNow:
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 ObjektUILocalNotification
aus dem Launch-Options-Verzeichnis mit dem SchlüsselUIApplicationLaunchOptionsLocalNotificationKey
ab. So können Sie wissen, wo die App geöffnet war, indem Sie dieUILocalNotification
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 diedidReceiveLocalNotification
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.
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 ..
- 1. Gibt es eine Möglichkeit, R-Code von JavaScript auszuführen?
- 2. Gibt es eine Möglichkeit, Java-Code auszuführen, wenn "Maven Deploy" ausgeführt wird?
- 3. Gibt es eine Möglichkeit, mit ASP.NET immer serverseitigen Code auszuführen, wenn ein Benutzer eine Seite verlässt?
- 4. Gibt es eine Möglichkeit, eine umgekehrte XPath-Abfrage auszuführen?
- 5. Gibt es eine Möglichkeit, eine Do-While auszuführen?
- 6. Gibt es eine Möglichkeit, eine lokale Niederlassung unveränderlich zu machen?
- 7. gibt es eine Möglichkeit, Befehle in Python auf Windows auszuführen?
- 8. Gibt es eine Möglichkeit, Komponententests sequenziell mit MSTests auszuführen?
- 9. Gibt es eine Möglichkeit, Bamboo-Tests gleichzeitig auszuführen?
- 10. Gibt es eine Möglichkeit, PHP auf Android auszuführen
- 11. Gibt es eine Möglichkeit, zwei jQuery-Animationen gleichzeitig (richtig) auszuführen?
- 12. Gibt es eine Möglichkeit, Aggregatfunktionen in Google App Engine auszuführen?
- 13. Gibt es eine Möglichkeit, ein PHP-Skript von MySQL auszuführen?
- 14. Gibt es eine Möglichkeit, git im schreibgeschützten Modus auszuführen?
- 15. Gibt es eine Möglichkeit, Roboter-Framework-Testsuiten parallel auszuführen?
- 16. Gibt es eine Möglichkeit, AT-COMMAND programmgesteuert in Android auszuführen?
- 17. Gibt es eine bessere Möglichkeit, diese Abfrage auszuführen?
- 18. Gibt es eine Möglichkeit, R in Excel auszuführen?
- 19. Gibt es eine Möglichkeit, OpenBravo auf AppEngine auszuführen?
- 20. Gibt es eine Möglichkeit, FIRST() in SQL Server auszuführen?
- 21. Gibt es eine Möglichkeit, Android TV in VirtualBox auszuführen?
- 22. Gibt es eine Möglichkeit, 2 NSAnimation-Objekte gleichzeitig auszuführen?
- 23. Gibt es eine Möglichkeit, herauszufinden, welcher Code eine Assembly verwendet?
- 24. Gibt es eine Möglichkeit, lokale Variablen in Modulen zu verwenden?
- 25. Gibt es eine Möglichkeit, eine exe automatisch erneut auszuführen, nachdem es einmal ausgeführt
- 26. In go, gibt es eine Möglichkeit Code bei Beendigung des Programms auszuführen?
- 27. Gibt es eine Möglichkeit Code nach einer nicht abgefangenen Ausnahme in iOS auszuführen?
- 28. Gibt es eine gute Möglichkeit zu sagen, wenn eine SMS auf Android gelesen wird?
- 29. Gibt es eine Möglichkeit, JavaScript-Code in Aptana Studio 3 IDE auszuführen?
- 30. Gibt es eine Möglichkeit, Code auszuführen, nachdem knockoutjs nur den Bindungskontext kennt?
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. –
@ LudvigSørensen Nein, wenn der 'UIViewController' immer noch Speicher ist, wirst du darüber benachrichtigt, ist nur das. –
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) –