NSLocalNotification的重复。驳回。合适的方式

时间:2016-01-27 14:28:29

标签: ios swift notifications

我想在上午10点创建每日通知,每天都有不同的内容。

func createNotification() {

let dateComp:NSDateComponents = NSDateComponents()
dateComp.hour = 10; // supposed to run each day at 10AM

var myCalendar:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
var date:NSDate = myCalendar.dateFromComponents(dateComp)!

let localNotification = UILocalNotification()
localNotification.fireDate = date
localNotification.alertBody = getContentStringForNotification() // Method returns different string for each date
localNotification.repeatInterval = .Day // Repeats every day
localNotification.timeZone = NSTimeZone.defaultTimeZone()
UIApplication.sharedApplication().scheduleLocalNotification(localNotification)

}

它重复通知。他们不断重复并返回昨天的通知。 我搜索了Stack社区的问题,我没有找到解雇它们的正确方法。

据我所知:

  • 应用程序已终止,并且它们已安排并独立执行 应用程序。反复运行应用程序将创建更多通知。
  • 通知未被正确解雇,他们返回 昨天的消息甚至第二天。

帮助:

  1. 解雇他们或检查他们是否被解雇的正确方法是什么 已经(确保他们不重复
  2. 我是否每天都会循环播放所有年份的通知,或者每次运行应用时为明天创建一个新通知
  3. 我错过了什么?代码欢迎。谢谢!

2 个答案:

答案 0 :(得分:6)

localNotification.repeatInterval = .Day // Repeats every day

这会使通知自动安排在每一天,因此如果您想要显示相同的通知(时间和内容),则不应安排新通知。

如果您要重新安排通知,请首先清除计划中的所有先前本地通知,或阅读有关如何清除单个UILocalNotification的文档

UIApplication.sharedApplication().cancelAllLocalNotifications()

答案 1 :(得分:2)

您在该代码中安排一个通知,只需一条消息,每天向用户显示一次。如果您每次打开应用程序或每天都运行该代码,则会导致注册许多不同的通知,每个通知每天触发一次并发出一些(可能是不同的)消息。

您应该使用cancelAllLocalNotificationscancelLocalNotification:删除旧通知。

可能你不想设置重复间隔。相反,每次打开应用程序时,都会在下一周的后续日期安排7个通知。如果用户在7天内没有使用该应用程序,您可能应该停止使用通知(尽管您可以注册更多应用程序限制)。