Ich mache eine App, die einige Erinnerungen verfolgt, die mit einem benutzerdefinierten Intervall wiederholt werden.
Ich habe es so gemacht, wenn die Warnung angezeigt wird, der Action-Titel lautet "Renew". Wenn Sie darauf klicken, wird die App geöffnet, und hier möchte ich die nächste Erinnerung erstellen, aber das Problem ist, dass ich nicht weiß, ob die App geöffnet wird, weil die Benachrichtigungsschaltfläche angetippt wurde oder die Benachrichtigung ausgelöst wurde, während die App ausgeführt wurde.
Hat jemand irgendwelche Ideen?
Der richtige Weg, dies zu tun, besteht darin, die applicationState-Eigenschaft Ihrer NSApplication in der Anwendung zu überprüfen: didReceiveRemoteNotification: Methode Ihres Delegaten.
Aus der Dokumentation zum Umgang mit lokalen Benachrichtigungen:
iOS Hinweis: In iOS können Sie bestimmen, ob eine Anwendung gestartet wird dadurch, dass der Benutzer auf die Aktionsschaltfläche klickt oder ob der Die Benachrichtigung wurde an die bereits laufende Anwendung von Überprüfen des Anwendungsstatus. In der Implementierung von die Anwendung: didReceiveRemoteNotification: oder Anwendung: didReceiveLocalNotification: Methode, erhalten Sie den Wert der applicationState-Eigenschaft und evaluieren sie. Wenn der Wert ist UIApplicationStateInactive, der Benutzer hat auf die Aktionsschaltfläche geklickt; wenn die Wert ist UIApplicationStateActive, die Anwendung war vorderste wann Es hat die Benachrichtigung erhalten.
Dies entspricht Ihrer Lösung, die Flags verwendet, die in applicationWillEnterForeground und applicationDidBecomeActive gesetzt sind, aber mit Systemunterstützung.
Ich weiß nicht, ob meine Frage unklar war, aber es scheint, dass ich vier verschiedene Antworten bekommen habe, die alle meine Frage falsch interpretiert haben: P
Allerdings habe ich festgestellt, dass die didReceiveLocalNotivication zwischen willEnterForeground und didBecomeActive auftritt, also habe ich das getan, um festzustellen, ob die App bereits geöffnet war oder nicht:
%Vor%Lesen Sie die Dokumentation für UIApplication-Startoptionsschlüssel. Der letzte Parameter für Ihre Anwendung: didFinishLaunchingWithOptions: Die Delegate-Methode enthält die benötigten Informationen.
Siehe auch Anwendung: didReceiveLocalNotification .
Wenn Ihre Anwendung bereits ausgeführt wird, erhalten Sie diese Delegiertenmeldung auf dem App-Delegaten
%Vor%Wenn es nicht ausgeführt wurde, müssen Sie
verwenden %Vor%Sie müssen in beiden Methoden entsprechend reagieren, um alle Fälle abzudecken
AKTUALISIERT
Um festzustellen, ob der Benutzer die Aktionsschaltfläche aktiviert hat, ist etwas mehr Komplexität erforderlich. Wir können sagen, dass application:didFinishLaunchingWithOptions:
die lokale Benachrichtigung als Startoption haben wird, aber es ist schwieriger mit application:didReceiveLocalNotification:
.
Da die Anwendung aktiv wird, nachdem der Benutzer auf die Schaltfläche geklickt hat, müssen wir warten, bis wir diese Nachricht sehen (oder nicht). Legen Sie eine NSTimer
in application:didReceiveLocalNotification
fest und stornieren Sie sie in didBecomeActive
. Das bedeutet, dass der Benutzer den Aktionsknopf gedrückt hat. Wenn der Timer nicht abgebrochen wird, befand sich der Benutzer beim Starten in der App.
Tags und Links iphone cocoa-touch