Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在不检查应用程序状态的情况下确定是否点击UILocalNotification?_Ios_Swift_Notifications_Uilocalnotification_Appdelegate - Fatal编程技术网

Ios 如何在不检查应用程序状态的情况下确定是否点击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

我正在创建一个应用程序,当我点击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即使在我从应用程序中下拉通知中心时未点击通知,也会显示,因为我这样做时,应用程序状态将从非活动变为活动


那么,在这种情况下,我如何检测通知是否被点击?与应用程序状态一起检查的条件是什么?

在收到通知时,请尝试使用此代码检查活动/非活动状态

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
        ...
    }
}