在UILocalNotification中创建周数间隔以及周期

时间:2011-11-15 04:40:34

标签: iphone uilocalnotification

我正在制作使用UILocalNotification的应用。我想知道如何在UILocalNotification中留出空白,即我如何安排4周的警报(每天重复或每隔一天重复一次),关闭1周,再关闭4周,关闭1周等等。这只是一个案例。这些差距是动态的,并在运行时决定。

2 个答案:

答案 0 :(得分:0)

由于您需要特殊的重复方案,因此无法使用repeatInterval。我想你必须为你想拥有的每一天安排本地通知:

  • 前4周每天28次通知,
  • 第二个为期4周的每一天的28次通知,
  • 等......

一些可能有用的代码:

/**
  This method will schedule 28 notifications, each 24 hours exactly for 4 weeks,
  starting from dayOne (first notification will be at dayOne, the second one
  at dayOne + 24 hours..., so be sure to choose the hour you want by setting
  dayOne correctly.
 */
- (void)scheduleLocalNotificationsEachDayFor4WeeksStartingFrom:(NSDate *)dayOne {

  // Schedule notifications for each day during 4 weeks starting at dayOne
  NSMutableArray *notifications = [NSMutableArray array];
  for (int i = 0; i < 28; i++) {
    [notifications addObject:notificationForDay(dayOne, i)];
  }
  for (UILocalNotification *notification in notifications) {
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];
  }
}

UILocalNotification *notificationInSomeDays(NSDate *referenceDate, NSUInteger some) {
  UILocalNotification *notification = [[[UILocalNotification alloc] init] autorelease];

  // Notification timing
  NSUInteger days = 60*60*24; // number of seconds in a day
  notification.fireDate = [referenceDate dateByAddingTimeInterval:some * days];
  notification.timeZone = [NSTimeZone localTimeZone]; // use local time zone if your reference date is a local one, or choose the appropriate time zone

  // define your notification content...

  return notification;
}

您可以使用scheduleLocalNotificationsEachDayFor4WeeksStartingFrom:方法安排每周4周所需的28个通知。因此,您现在可以根据需要经常调用它,并在每个4周的第一天调用它,以便开始通知。

当您启动应用时,您应该清除所有当前的本地通知并重新安排它们以符合您的要求。特别是,如果应用程序在应运行通知的4周时间内启动,则必须进行调整。在这种情况下,您必须调整建议的scheduleLocalNotificationsEachDayFor4WeeksStartingFrom方法以减少预定通知的数量......

答案 1 :(得分:0)

她的意思是说这些gaos是动态的....所以如果她在前4周设置28通知,在第二期设置28通知等等......那么每个应用程序将跨越64个本地通知.. .....这些差距是动态的意味着它可以是任何假设12周/ 1周休息.....然后通过你的方法她必须设置84通知单一药物(交叉限制),他们肯定不止一种这类药......