创建将于明天开始的每日本地通知

Posted

技术标签:

【中文标题】创建将于明天开始的每日本地通知【英文标题】:Create a daily local notification that will start tomorrow 【发布时间】:2014-04-17 06:52:48 【问题描述】:

我有一个应用程序每天都会提醒用户某项待办事项,但如果他们已经这样做了,我不需要提醒他们。

我解决问题的方法是创建一个本地通知,该通知每天在随机时间触发。当一天的待办事项已经完成时,我将本地通知日重新安排到明天,方法是取消它并创建一个明天的新通知。但是这个解决方案不起作用。似乎当您指定每天触发本地通知 (repearInterval=NSDayCalendarUnit) 时,它不遵守 fireDate 日期属性。

这是我的代码:

/*** notification is created like this ***/
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = [self randomHourMinFromDate:[NSDate date]];
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = @"A todo item is due!";
localNotif.alertAction = @"View Item";
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.repeatInterval = NSDayCalendarUnit;


/*** some other part of the code ***/
NSArray *scheduledNotifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
UILocalNotification *notification = [scheduledNotifications firstObject];

// adds 1 day to notification fireDate
NSDate *newFireDate = [notification.fireData dateByAddingTimeInterval:60*60*24*1];

[[UIApplication sharedApplication] cancelLocalNotification:notification];
notification.fireDate = newFireDate;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];

你能告诉我我做错了什么吗?或者也许推荐一个更好的解决方案?蒂亚!

【问题讨论】:

您应该使用 NSDateComponents 而不是将这种 timeInterval 添加到您的 NSDate。 我认为这不会改变任何事情。我记录了 newFireDate 的值,它确实是明天的日期。如果我改用 NSDateComponents,你能解释一下有什么区别吗? (感谢您的快速回答!) 应该可以解决您的问题。但那是推荐的。例如,在法国,它们是夏季/冬季时间,相差一小时(因此一年中的一天有“23 小时”,而另一天有“25 小时”)。因此,如果您的日期在这个时间变化范围内,您将在您设置的时间前一小时或一小时后收到通知。 我明白了,这只是一个建议,而不是解决问题的方法。感谢您的提示! 【参考方案1】:

我有个主意。当一天的待办事项已经完成时,取消通知并创建一个新通知。将firedate设置为当前日期与同一时间,并设置dateByAddingTimeInterval: 60*60*24。

localNotification.fireDate = [CurrentDate dateByAddingTimeInterval:60*60*24];

愿这行得通。

【讨论】:

以上是关于创建将于明天开始的每日本地通知的主要内容,如果未能解决你的问题,请参考以下文章

带有开始和结束时间的每日本地通知

iPhone : 每日本地通知

iOS 上的每日本地通知

每天在设定的时间快速重复本地通知

如何根据 CVcalendar 中的特定时间进行每日本地通知?

ios本地通知同时通知但不同日期的不同警报消息