取消用户关闭/退出应用程序时未执行的 LocalNotifications 方法

Posted

技术标签:

【中文标题】取消用户关闭/退出应用程序时未执行的 LocalNotifications 方法【英文标题】:Cancel LocalNotifications method not executing when user closes/exits the app 【发布时间】:2015-07-23 16:56:11 【问题描述】:

我正在 Xcode 模拟器和 iPhone 6 上的 ios 8.4 上对此进行测试。我的通知工作正常并且可以完美触发。但我不知道如何在用户退出/关闭应用程序时取消通知。按主页按钮不应取消通知,仍应触发通知。

这是我尝试过的。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];

return YES;

[[UIApplication sharedApplication] cancelAllLocalNotifications];

对于以下方法 - 当用户按下主页按钮但或关闭不是我想要的应用程序时,它会取消通知。

- (void)applicationDidEnterBackground:(UIApplication *)application 

对于以下方法 - 通知不会取消主页按钮或关闭应用程序。

- (void)applicationWillEnterForeground:(UIApplication *)application

对于下面的方法 - 它根本不执行主页按钮或关闭应用程序的方法。

- (void)applicationWillTerminate:(UIApplication *)application

我查看了关于堆栈溢出的其他类似问题,但似乎无法让任何这些建议发挥作用。请指教。

【问题讨论】:

【参考方案1】:

一旦您触发通知,它将在操作系统中注册。操作系统及时呈现通知。应用程序终止后,您无法删除通知。终止时不会调用任何方法。

如果您的应用处于前台,当通知到达时,didReceiveLocalNotification 方法将被调用。

如果你在后台调用 DidLaunchwithOption 方法。

如果应用程序终止,则不会调用任何方法。

当您在这些方法中收到静默通知时,您会触发静默通知并呈现实际通知。您可以使用 userinfo 来识别您的通知。

【讨论】:

你能用代码解释我如何实现这一点吗?应在何时何地调用 cancelLocalNotitification 方法。【参考方案2】:
(void)applicationDidEnterBackground:(UIApplication *)application

过渡到背景,即按下主页按钮时。

(void)applicationWillEnterForeground:(UIApplication *)application

退出后台状态时调用

(void)applicationWillTerminate:(UIApplication *)application

仅在应用运行时调用。如果应用被挂起,则不会调用此方法。

因此,当应用程序即将终止时,您将无法取消通知。因此,您应该选择其他一些机制来删除本地通知。比如创建一个按钮来取消所有通知或类似的东西。

【讨论】:

我希望它自动发生。这样,如果应用程序崩溃或用户电池没电了,它就会取消通知。

以上是关于取消用户关闭/退出应用程序时未执行的 LocalNotifications 方法的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 在关闭/退出时未清除 SESSION COOKIES

pthread中取消线程

关闭模式视图时未调用 onDisappear

网络共享怎么取消密码?

如何检测在 Netbeans 中进行分析时未显示的内存泄漏? [关闭]

Qt 5.1 Windows 7 - Windows 注销时未调用 aboutToQuit()