如何在不检查应用程序状态的情况下确定是不是点击了 UILocalNotification?
Posted
技术标签:
【中文标题】如何在不检查应用程序状态的情况下确定是不是点击了 UILocalNotification?【英文标题】:How to determine whether the UILocalNotification is tapped without checking application state?如何在不检查应用程序状态的情况下确定是否点击了 UILocalNotification? 【发布时间】:2015-03-19 12:04:40 【问题描述】:我正在创建一个应用程序,当我点击 UILocalNotification 时应该打开特定的视图控制器。我的代码是:
func application(application:UIApplication!, didReceiveLocalNotification notification: UILocalNotification)
var root = self.window!.rootViewController as ViewController
let main: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
var setview = main.instantiateViewControllerWithIdentifier("destination") as tapViewController
if application.applicationState == UIApplicationState.Inactive
root.presentViewController(setview, animated:false , completion: nil)
当我从我的应用程序下拉通知中心时,即使我没有点击通知,也会显示 TapViewController,因为当我这样做时,应用程序状态正在从非活动变为活动。
那么在这种情况下如何检测通知是否被点击?与应用程序状态一起检查的条件是什么?
【问题讨论】:
What method is triggered when local notification is dismissed from notification centre of ios?的可能重复 【参考方案1】:在收到通知时尝试使用此代码检查活动/非活动状态。
func application(application: UIApplication, didReceiveLocalNotification userInfo: [NSObject : AnyObject])
if application.applicationState == UIApplicationState.Inactive || application.applicationState == UIApplicationState.Background
//opened from a push notification when the app was on background
【讨论】:
尝试了您在代码中提到的更改,但输出与我在问题中提到的相同。当应用程序从活动状态转换为非活动状态时,会出现此问题。 :( 当我在应用程序处于后台时点击通知时,它工作正常@SVMRAJESH【参考方案2】:试试这段代码(用Objective C编写,你可以轻松切换到Swift)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
NSAssert(notification.fireDate != nil, @"Please use scheduleLocalNotification instead of presentLocalNotificationNow with fireDate.");
// 0.2s is threshold time, you can adjust it
if (application.applicationState != UIApplicationStateActive && [notification.fireDate timeIntervalSinceNow] < -0.2)
// user tapped the notification
...
我不明白为什么苹果不提供检查通知是否被点击的方法。
【讨论】:
以上是关于如何在不检查应用程序状态的情况下确定是不是点击了 UILocalNotification?的主要内容,如果未能解决你的问题,请参考以下文章
当应用程序处于状态后台或被杀死时,如何在不点击通知的情况下存储 iOS 远程通知?