Ios 如何在不检查应用程序状态的情况下确定是否点击UILocalNotification?
我正在创建一个应用程序,当我点击UILocalNotification时,它会打开特定的视图控制器。我的代码是:Ios 如何在不检查应用程序状态的情况下确定是否点击UILocalNotification?,ios,swift,notifications,uilocalnotification,appdelegate,Ios,Swift,Notifications,Uilocalnotification,Appdelegate,我正在创建一个应用程序,当我点击UILocalNotification时,它会打开特定的视图控制器。我的代码是: func application(application:UIApplication!, didReceiveLocalNotification notification: UILocalNotification) { var root = self.window!.rootViewController as ViewController let main: UIStoryb
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即使在我从应用程序中下拉通知中心时未点击通知,也会显示,因为我这样做时,应用程序状态将从非活动变为活动
那么,在这种情况下,我如何检测通知是否被点击?与应用程序状态一起检查的条件是什么?在收到通知时,请尝试使用此代码检查活动/非活动状态
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
}
}
试试这段代码(用Objective C编写,您可以轻松切换到Swift)
-(void)应用程序:(UIApplication*)应用程序收到本地通知:(UILocalNotification*)通知{
NSAssert(notification.fireDate!=nil,@“请使用scheduleLocalNotification,而不是使用fireDate的presentLocalNotificationNow。”);
//0.2s是阈值时间,您可以调整它
if(application.applicationState!=UIApplicationStateActive&[notification.fireDate timeIntervalSinceNow]<-0.2){
//用户点击了通知
...
}
}
我不明白为什么苹果不提供检查通知是否被点击的方法。尝试了代码中提到的更改,但输出与我在问题中提到的相同。当应用程序从活动状态转换为非活动状态时,会出现此问题:(当我在后台@SVMRAJESHpossible duplicate of应用程序时点击通知时,它工作正常
- (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
...
}
}