如何在不检查应用程序状态的情况下确定是不是点击了 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不下载的情况下使用其 URL 检查文件是不是存在?

当应用程序处于状态后台或被杀死时,如何在不点击通知的情况下存储 iOS 远程通知?

如何在不点击请求的情况下知道用户是不是有待处理的应用请求?

如何在不使用 SafeArea 的情况下检查设备是不是有缺口?

如何在不检查路径扩展名的情况下检查文件是不是为图像文件?

如何在不发送任何内容的情况下检查频道是不是已满[重复]