繁体   English   中英

iOS在特定日期设置本地通知

[英]iOS set local notification on a specific day

我确信这个问题在某个地方是重复的,但我找不到解决办法。 我正在创建一个应用程序,其中一个功能允许用户选择他们将收到本地通知的日期和时间。

他们可以选择他们喜欢的一天中的任何时间,并可以切换一周中的不同日期(周一,周二,妻子等)。 通知将每周发送一次。 因此,我限制用户只创建3个通知 - 如果选择了所有7天,我会将repeatInterval设置为daily(一个通知)。 如果为每3个通知选择了6天,那么我将需要每天的单独通知(总共3x6 = 18个通知)。 很可能只会使用1个通知,所以这很好。

我知道如何在将来的某个时间设置通知,但如何在星期一下午6点设置通知?

下面是我用于测试的代码。 它将来会设置4秒的警报(我从applicationDidEnterBackground调用它)。

    NSDateComponents *changeComponent = [[NSDateComponents alloc] init];
    changeComponent.second = 4;

    NSCalendar *theCalendar = [NSCalendar currentCalendar];
    NSDate *itemDate = [theCalendar dateByAddingComponents:changeComponent toDate:[NSDate date] options:0];

    UILocalNotification *localNotif = [[UILocalNotification alloc] init];
    localNotif.fireDate = itemDate;
    localNotif.timeZone = [NSTimeZone defaultTimeZone];
    localNotif.repeatInterval = NSWeekdayCalendarUnit;

与您现在正在做的完全相同,但以不同方式创建日期:

NSDateComponents *comps = [[[NSDateComponents alloc] init] autorelease];
[comps setDay:1];
[comps setMonth:1];
[comps setYear:2013];
[comps setHour:10];
[comps setMinute:10];
[comps setSecond:10];
localNotif.fireDate = [[NSCalendar currentCalendar] dateFromComponents:comps];

我也搜索过它。 下面的代码对我有用。 将星期日值1到7星期日到星期六和通知机构通过您要触发的操作并指定您的日期然后通知将在特定日期到来。希望这对您有所帮助。

-(void) weekEndNotificationOnWeekday: (int)weekday :(UILocalNotification *)notification : (NSDate*) alramDate
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDateComponents *componentsForFireDate = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit |  NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit) fromDate: alramDate];
    [componentsForFireDate setWeekday: weekday] ; //for fixing Sunday
  //   [componentsForFireDate setHour: 20] ; //for fixing 8PM hour
 //    [componentsForFireDate setMinute:0] ;
 //    [componentsForFireDate setSecond:0] ;
    notification.repeatInterval = NSWeekCalendarUnit;
    notification.fireDate=[calendar dateFromComponents:componentsForFireDate];
    [[UIApplication sharedApplication] scheduleLocalNotification:notification];

}

我知道如何在将来的某个时间设置通知,但如何在星期一下午6点设置通知?

您可以在下周一创建一个表示下午6点的NSDate对象,其方法如何从现有NSDate获取特定日期和时间的NSDate 然后,如果您希望它在每个星期一重复,您可以使用localNotification.repeatInterval = NSWeekCalendarUnit 但是我不确定它会在夏令时期间按预期工作。

我认为您不能安排具有这么大灵活性的通知。 只要在他们改变它的时候安排下一个,并且当它触发计划时,下一个即将发生。 只有一个担心取消和易于设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM