我正在开发一个应用程序,因为我无法使用自定义时间间隔来安排本地通知,所以必须创建N个本地通知来模拟定时计划 . 应用程序为每个X对象执行一次(现在让我们将它们称为日历事件) . 因此,用户可以拥有100个日历事件,每个事件具有20个本地通知,每隔几分钟/几天/几周/一次提醒用户 .
这就是它变得棘手的地方:让我们说其中一个通知从现在起2分钟就会消失,其中一个从现在起3分钟后就会消失 . 假设我忽略了第一个,但点击操作按钮转到第二个应用程序 . 我的处理程序方法didFinishLaunchingWithOptions:在应用程序委托中没有被调用;应用程序直接进入主屏幕 . 我似乎只能通过applicationDidBecomeActive:获得一个方法来响应以这种方式加载的应用程序 .
我该如何处理这些通知?即使在applicationDidBecomeActive:中,我也无法通过[[UIApplication sharedApplication] scheduledLocalNotifications]访问通知,因为它们似乎在调用该方法之前被清除 .
谢谢!
1 回答
几点注意事项:
UILocalNotification的最大数量
您给出了每个“日历事件”将需要大约20个本地通知的方案,并且您希望典型用户最多可以有100个日历事件 . 这将使2,000 UILocalNotification . 您可能需要注意iOS4将UILocalNotification的数量限制为每个应用64个 .
见:UILocalNotification Class Reference
处理UILocalNotification
从iOS4开始,应用程序不再仅通过应用程序启动:didFinishLaunchingWithOptions:
application:didFinishLaunchingWithOptions:当应用程序从非后台状态启动时仅调用一次(例如,用户首次启动,之前的启动被iOS杀死以节省内存,用户从多任务栏中杀死应用程序,设备重新启动) .
因此实际上有三种不同的场景可以考虑在iOS4中处理UILocalNotification(这是引入多任务处理的地方) .
当您的应用程序背景化时,处理通知的地方是通过应用程序:didReceiveLocalNotification :,在两种情况下触发:
当您的应用程序处于后台时,用户从警报通知中点按'View'操作按钮'launch'您的应用
当应用程序在前台运行时,通知会触发 .
application:didFinishLaunchingWithOptions:只处理一个场景:
不支持多任务处理的设备(例如iPhone 3G)根本不会使用场景1,而只使用场景3 .
在方案2中,您可以处理自己的通知,包括显示任何适当的UIAlertView或执行某些操作 .
现在,最后要注意的是,当应用程序未在前台运行并被用户忽略时触发的通知(即用户未点击'View'操作按钮)将触发方案1或3.他们将不会提供任何通知在随后的发布中通知您的应用程序 .
你不能通过[[UIApplication sharedApplication] scheduledLocalNotifications]访问这些通知,因为它们在通知时已经过期了 .
希望这可以帮助!