【问题标题】:Architectural issue: Design of recurring events架构问题:重复事件的设计
【发布时间】:2014-11-10 16:40:08
【问题描述】:

我需要在我们的应用程序中有一个逻辑,它允许定义重复事件(例如,每个星期二,每个月的第一天),然后导致应用程序中的特定操作。

我认为 UILocalNotification 会是一个好主意,但是通过这个类,我也向用户发送了一个通知,我想在应用程序中处理事件only(如果应用程序不在线,那么可能是下一次应用启动时)

另一个想法是设置一个包含事件的列表,并在每次应用启动时检查事件是否到期 - 但这似乎很过时 - 希望有更好的东西。

非常感谢您的任何建议

【问题讨论】:

    标签: ios xcode architecture recurring


    【解决方案1】:

    您肯定想在您的情况下使用UILocalNotification,它将完全满足您描述的需求。

    正如您所说,该事件应该只在应用程序处于活动状态时触发(在前台),您必须添加一些自定义逻辑才能实现这一点,但这并不是一项非常困难的任务,并且你有多种选择。

    我建议您使用AppDelegate应用程序生命周期 方法,在适当的时候安排和删除通知。

    UIApplicationDelegate 协议包含两个与您的案例相关的方法(实际上更多,但这两个将为您完成工作......)。首先我们有applicationWillEnterBackground:,您应该在那里删除所有当前安排的通知。在 applicationDidBecomeActive: 方法中,您可以重新安排通知,因为每次您的应用再次进入前台时都会调用此通知。

    如果您还有其他问题,请告诉我:)

    【讨论】:

    • 非常感谢您的回答。我是否理解正确,这意味着每当应用程序处于活动状态时,我都会重新安排所有现有通知(一次输入大约 20 到 50 个不同的时间表)并在应用程序不再处于活动状态时将其删除?(如非常感谢您的回答,不知怎的,我希望有一个更简单的解决方案)
    • 好吧,理想情况下,您可以将用于(重新)安排通知的逻辑封装到专用类中(例如NotificationManager)。这样,您只需实现一次逻辑,然后只需在 AppDelegate 中重用该类的实例即可。这应该只是applicationWillEnterBackground:applicationDidBecomeActive: 中的一个方法调用,类似于[notificationManager scheduleNotifications][notificationManager removeNotifications]
    • NotificationManager 是始终知道要安排多少通知以及何时安排通知的类,您的 AppDelegate 只调用它的方法
    • 还有一个补充,因为您已经说过要安排 20 到 50 个通知,您可能希望使用 performSelector:withObject: 在后台线程中执行此操作,这可能看起来像这样:[notificationManager performSelector:@selector(scheduleNotifications) withObject:nil]
    • 嗨,是的,我知道了,再次感谢,会试一试并告诉你。祝你有美好的一天