确定是否从调度或用户交互中触发了UILocalNotification

时间:2013-05-14 02:20:25

标签: ios cocoa uikit uilocalnotification

我正在尝试确定UIApplication didReceiveLocalNotification:的不同情景。如果用户点击通知时应用程序处于非活动状态,我应该将它们带到相应的UI页面。否则,如果用户刚刚打开应用而未点击通知,我应该让他们留在他们离开的用户界面页面。

然而,由于UILocalNotification由我自己安排,因此存在一些问题。

[[UIApplication sharedApplication] scheduleLocalNotification:scheduledAlert];

所以每当它被iOS触发时,当我手动点击状态栏上的通知时,它将调用与回调相同的委托方法:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { ... }

我尝试了一些棘手的黑客攻击,例如在app处于非活动模式时计算已触发的时间,计数1表示iOS触发,计数2表示用户单击,以及相对计数管理代码。

但我不认为这可能是最好的做法。我检查了iOS Messages应用程序,它具有相同的功能。如果您将应用程序置于非活动模式,例如向下滚动状态栏,则可以确定UILocalNotification来自您的触摸(并将打开文本编辑模式),或者只是您返回应用程序(停留)在以前的状态)。

如果你们能告诉我这里最好的解决方案,我将不胜感激!

2 个答案:

答案 0 :(得分:0)

我使用自定义键值对,我设置了一个NSMutableDictionary,然后我将其分配给UILocalNotification.userInfo,以告诉不同的场景。

答案 1 :(得分:-1)

我检查应用状态,以便我只处理通知,如果我来自后台:

UIApplicationState state = [application applicationState];
if (state == UIApplicationStateInactive) {
    // Your  Code Here
} else {

}
相关问题