如何设置 UILocalNotification 连续 30 天

Posted

技术标签:

【中文标题】如何设置 UILocalNotification 连续 30 天【英文标题】:How to set UILocalNotification for 30 consecutive days 【发布时间】:2013-10-31 12:49:55 【问题描述】:

我想在每天上午 8:00 连续 30 天安排 UILocalNotificaion,并且我想仅使用一个 UILocationNotification 实例来实现该功能。这是我安排本地通知的代码。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm"];
NSDate *date = [[NSDate alloc] init];
date = [formatter dateFromString:@"08:00"];
UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = date;
localNotification.timeZone=[NSTimeZone defaultTimeZone];
localNotification.alertBody = @"You just received a local notification";
localNotification.alertAction = @"View Details";
localNotification.soundName = UILocalNotificationDefaultSoundName;
localNotification.repeatInterval = NSDayCalendarUnit;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
[formatter release];
[date release];

它将在上午 08:00 永远触发每日通知,但我只想连续 30 天收到通知。最简单的解决方案是触发 30 个 UILocalNotifications 但我想用 1 个 UILocalNotification 实例来做到这一点。我怎样才能做到这一点?请帮忙。

【问题讨论】:

【参考方案1】:

在创建通知时,在 UILocalNotification userInfo 属性中保存 NSDate 对象。 当您打开通知时, 使用 userinfo 中的日期检查当前日期。如果差异超过 30 天,您可以取消本地通知。

【讨论】:

如果用户检查或收到通知,您的解决方案将起作用。但是如果用户没有收到或检查任何通知怎么办? @ShahidIqbal 找到了这个特定问题的答案? @llario 我想我必须接受 Kareem 的回答。【参考方案2】:
NSDate *now = [NSDate date];

// now a NSDate object for now + 30 days
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:30];
NSDate *endDate = [gregorian dateByAddingComponents:offsetComponents toDate:now options:0];

检查后:

if([currentDate isEarlierDate:endDate])
//Fire the notification

【讨论】:

以上是关于如何设置 UILocalNotification 连续 30 天的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 iOS 8 弃用设置每周重复的 UILocalNotification?

如何使用 UILocalNotification 设置振动并且声音不会仅振动 iphone

设置 UILocalNotification 的 fireDate

如何在 Swift 中使用 UILocalNotification

iPhone - UILocalNotification 作为警报

如何从 UILocalNotification 对象中获取 NEXT 触发日期