首页 文章

多个UILocalNotification管理

提问于
浏览
1

我正在开发一个应用程序,因为我无法使用自定义时间间隔来安排本地通知,所以必须创建N个本地通知来模拟定时计划 . 应用程序为每个X对象执行一次(现在让我们将它们称为日历事件) . 因此,用户可以拥有100个日历事件,每个事件具有20个本地通知,每隔几分钟/几天/几周/一次提醒用户 .

这就是它变得棘手的地方:让我们说其中一个通知从现在起2分钟就会消失,其中一个从现在起3分钟后就会消失 . 假设我忽略了第一个,但点击操作按钮转到第二个应用程序 . 我的处理程序方法didFinishLaunchingWithOptions:在应用程序委托中没有被调用;应用程序直接进入主屏幕 . 我似乎只能通过applicationDidBecomeActive:获得一个方法来响应以这种方式加载的应用程序 .

我该如何处理这些通知?即使在applicationDidBecomeActive:中,我也无法通过[[UIApplication sharedApplication] scheduledLocalNotifications]访问通知,因为它们似乎在调用该方法之前被清除 .

谢谢!

1 回答

  • 10

    几点注意事项:

    UILocalNotification的最大数量

    您给出了每个“日历事件”将需要大约20个本地通知的方案,并且您希望典型用户最多可以有100个日历事件 . 这将使2,000 UILocalNotification . 您可能需要注意iOS4将UILocalNotification的数量限制为每个应用64个 .

    见:UILocalNotification Class Reference

    应用程序只能有有限数量的预定通知;系统保持最快的64次通知(自动重新安排的通知计为单个通知)并丢弃其余的通知


    处理UILocalNotification

    从iOS4开始,应用程序不再仅通过应用程序启动:didFinishLaunchingWithOptions:

    application:didFinishLaunchingWithOptions:当应用程序从非后台状态启动时仅调用一次(例如,用户首次启动,之前的启动被iOS杀死以节省内存,用户从多任务栏中杀死应用程序,设备重新启动) .

    因此实际上有三种不同的场景可以考虑在iOS4中处理UILocalNotification(这是引入多任务处理的地方) .

    当您的应用程序背景化时,处理通知的地方是通过应用程序:didReceiveLocalNotification :,在两种情况下触发:

    • 当您的应用程序处于后台时,用户从警报通知中点按'View'操作按钮'launch'您的应用

    • 当应用程序在前台运行时,通知会触发 .

    application:didFinishLaunchingWithOptions:只处理一个场景:

    • 当您的应用 is not 在后台运行时,当用户点按'View'操作按钮以从警报通知启动您的应用时

    不支持多任务处理的设备(例如iPhone 3G)根本不会使用场景1,而只使用场景3 .

    在方案2中,您可以处理自己的通知,包括显示任何适当的UIAlertView或执行某些操作 .


    现在,最后要注意的是,当应用程序未在前台运行并被用户忽略时触发的通知(即用户未点击'View'操作按钮)将触发方案1或3.他们将不会提供任何通知在随后的发布中通知您的应用程序 .

    你不能通过[[UIApplication sharedApplication] scheduledLocalNotifications]访问这些通知,因为它们在通知时已经过期了 .

    希望这可以帮助!

相关问题