【问题标题】:Multiple UILocalNotification Management多个 UILocalNotification 管理
【发布时间】:2010-07-16 23:26:49
【问题描述】:

我正在开发一个应用程序,由于我不能使用自定义时间间隔来安排本地通知,因此我必须创建 N 个本地通知来模拟定时安排。应用程序对每个 X 对象执行一次(我们现在称它们为日历事件)。因此,一个用户可以有 100 个日历事件,每个事件都有 20 个本地通知,每隔几分钟/几天/几周/任何时间提醒用户一次。

这就是棘手的地方:假设其中一个通知会在 2 分钟后关闭,而另一个通知会在 3 分钟后关闭。假设我忽略了第一个,但点击操作按钮转到第二个上的应用程序。我的处理程序方法 didFinishLaunchingWithOptions: 在应用程序委托中没有被调用;该应用程序直接进入主屏幕。我似乎能够获得一种方法来响应以这种方式加载的应用程序的唯一方法是使用 applicationDidBecomeActive:。

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

谢谢!

【问题讨论】:

    标签: iphone objective-c notifications push-notification


    【解决方案1】:

    注意事项:

    UILocalNotification 的最大数量

    您假设每个“日历事件”需要大约 20 个本地通知,并且您希望一个典型用户最多有 100 个日历事件。这将产生 2,000 个 UILocalNotification。您可能需要注意,iOS4 将每个应用的 UILocalNotification 数量限制为 64。

    见:UILocalNotification Class Reference

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


    处理 UILocalNotification

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

    application:didFinishLaunchingWithOptions: 仅在应用从非后台状态启动时调用一次(例如,用户首次启动,之前的启动被 iOS 终止以节省内存,用户从多任务栏终止应用,设备已重新启动)。

    所以实际上有三种不同的场景需要考虑在 iOS4 中处理 UILocalNotification(这是引入多任务的地方)。

    当您的应用程序处于后台时,处理通知的地方是通过 application:didReceiveLocalNotification:,它在两种情况下触发:

    1. 当您的应用处于后台时,当用户点击“查看”操作按钮以从警报通知中“启动”您的应用时
    2. 当您的应用在前台运行时触发通知。

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

    1. 当您的应用在后台运行
    2. 时,当用户点击“查看”操作按钮从警报通知启动您的应用时

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

    在场景 2 中,您自己处理通知,包括显示任何适当的 UIAlertView 或执行某些操作。


    现在,最后要注意的是,当应用未在前台运行并被用户忽略(即用户没有点击“查看”操作按钮)时触发的通知将不会 > 触发场景 1 或 3。它们在后续启动时根本不会向您的应用发送任何通知。

    您是对的,您不能再通过 [[UIApplication sharedApplication] scheduledLocalNotifications] 访问这些通知,因为它们在通知时已经过期。

    希望这会有所帮助!

    【讨论】:

    • 我找到了一种解决方法,可以解决用户只是启动应用程序而不是单击通知的情况。我在本地通知中设置了徽章编号,然后在应用启动时检查徽章计数是否大于 0。
    • 就像其他人看到的注释:每个应用程序的本地通知数量限制将自动重新安排的通知计为一个(基本上,如果您有 64 个通知,每个通知每天重复 100 次,它仍然算作 64 条通知)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 2015-05-04
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多