如何设置 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