如果尚未执行操作,如何安排本地通知?

时间:2012-02-18 18:20:21

标签: iphone ios5 notifications

如果满足某个条件(用户没有输入每日数据),我想安排在每天晚上7点开火的本地通知。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

在iOS中安排本地通知非常简单 - Apple有一个很好的示例:https://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW13

我假设“输入每日数据”的条件正在 你的应用中发生,对吧?如果是这样,那么您基本上只会安排每天晚上7点的本地通知,然后如果用户 输入每日数据,您只需取消当天的通知。我发现本地通知安排有点挑剔,所以我可能cancelAllLocalNotifications然后重新安排它们。

请注意,应用仅限一次只能安排64个本地通知。因此从理论上讲,您可以安排64天(因为您每天只有一个通知)。我会对此保持谨慎,因为它可能真的惹恼了用户。我可能一次只能做几天或一周,因为如果他们在几次提醒后没有打开应用程序,他们可能会失去兴趣。

答案 1 :(得分:1)

将其分解为3个案例:

  1. 现在是晚上7点之前,用户还没有输入他们的每日数据
  2. 在晚上7点之前,用户 输入了他们的每日数据
  3. 晚上7点以后
  4. 在案例1中,您设置了一个通知,以便在晚上7点今天,然后每天重复。

    在案例2和案例3中,您设置了一个通知,以便在晚上7点明天,然后每天重复。

    创建和安排通知的代码如下所示:

    UILocalNotification *dailyNotification = [[UILocalNotification alloc] init];
    dailyNotification.fireDate = nextReminderTime; // set this to 7pm today or tomorrow
    dailyNotification.timeZone = [NSTimeZone defaultTimeZone]; 
    dailyNotification.repeatInterval = NSDayCalendarUnit;
    dailyNotification.soundName = UILocalNotificationDefaultSoundName;
    dailyNotification.alertBody = @"You need to enter data for today.";
    

    当然,如果你今天晚上7点设置了警报,那么用户打开应用程序并在晚上7点之前输入数据,今天的通知需要取消。

    或者(这是我在类似情况下所做的),您可以使用[[UIApplication sharedApplication] cancelAllLocalNotifications];取消所有通知,并在每次应用程序即将进入时根据应用程序状态从头开始重新设置背景(即UIApplication applicationDidEnterBackground:。这更简单,因为您不必考虑之前设置的通知。