2011-10-31 80 views
8

有了iOS 5和通知中心,您可以等待通知,每个通知都有自己的数据和消息。当您的程序定期启动(无需点击通知)以发现等待通知,更重要的是与它们相关的数据有什么方法吗?检查是否有等待通知

与此相关的另一个问题是,当推送通知进来并且您的应用程序在后台时,application:didReceiveLocalNotification:仍然会被调用,或者只是启动并等待直到应用程序启动,然后您需要手动处理它与发射数据在application:didFinishLaunchingWithOptions:

我的方案是,我需要更新一些核心数据模型与附加到推送通知的数据,所以我希望这些更改反映无论他们如何启动应用程序。

回答

1

根据我的经验,除了通过它们直接启动应用程序(在iOS 5上,在收到通知之后或通知中心出现的排队通知之后),无法找到有关通知的信息。

另一种策略是使用图标徽章。

如果您在收到通知时标记了您的应用程序图标,则可以在每次启动应用程序时检查该号码,然后执行所需的操作。

1

当一个通知弹出时,您可以查看它或取消。如果用户已经取消通知,您可以检查他们的下一个他们在应用程序中去时间:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 

    if(localNotif) { 
     // Do some stuff 
     application.applicationIconBadgeNumber = 0; // Reset num of notifications on app icon 
    } 
} 

,如果你收到通知,而你在特定的应用程序,或者您选择确认,此方法被解雇本地通知:

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

BOOL inApp = [application applicationState] == UIApplicationStateActive; 

    if(inApp) { // they got this in the app 
     //Do some stuff in the app 
    } 
    else { 
     // They acknowledged the notification out of the app and here they are 
     // Do some other stuff 
    } 

    application.applicationIconBadgeNumber = 0; 
} 

这就给了你很好的覆盖与本地通知所有场景具体做法是:

  • 收到通知,用户取消。稍后检查didFinishLaunchingWithOptions
  • 通知已确认,应用程序未打开。检入didFinishLaunchingWithOptions
  • 通知被确认,该应用程序在后台。 didReceiveLocalNotification:
  • 通知被呈现,而在该应用didReceiveLocalNotification: