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

最佳答案

您将无法使用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方法以减少计划的通知的数量...

    关于iphone - 在UILocalNotification中创建周的间隔以及周期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8131588/

    10-11 14:15