本地通知在计划外的时间多次触发

Posted

技术标签:

【中文标题】本地通知在计划外的时间多次触发【英文标题】:Local Notification Firing Multiple Times And At Unscheduled Hours 【发布时间】:2016-03-23 07:16:30 【问题描述】:

我设置了一个本地通知,它应该在每天早上 8 点触发,但它确实会在早上 8 点触发 3 次,然后在上午 9 点和下午 12 点再次触发,之后它会停止并在下一次重复同样的事情天。

我检查了该函数是否被多次调用(不是),即使它被多次调用也不能解释在错误时间触发的原因。几乎所有我能想到的,重新实现了代码,但无济于事。

这就是我设置通知的方式:

func setUpMainLocalNotification() 

             let notificationSettings = UIApplication.sharedApplication().currentUserNotificationSettings()

                    if notificationSettings?.types == .None 

                        return

                    


     let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)!
     let currentCalendar = NSCalendar.currentCalendar()
     let date = NSDate()
     let calendarComponents = calendar.components([.Year, .Month, .WeekOfMonth, .Hour, .Minute, .Second], fromDate: date)



                    calendarComponents.hour = 8

                    calendarComponents.minute = 0
                    calendarComponents.second = 0

                    currentCalendar.timeZone = NSTimeZone.defaultTimeZone()



                    let reminder = UILocalNotification()
                    reminder.timeZone = NSTimeZone.defaultTimeZone()
                    reminder.fireDate = currentCalendar.dateFromComponents(calendarComponents)
                    reminder.alertBody = "Notification"
                    reminder.category = "CATEGORY_ID"

                    reminder.repeatInterval = .Day

                    reminder.alertAction = "Reply"
                    reminder.soundName = "sound.aif" 



                    UIApplication.sharedApplication().scheduleLocalNotification(reminder)


更新:

当我在这里阅读我自己的问题时,我注意到我在设置我希望我的通知触发的时间之后设置时区,所以我在设置时间之前将以下行移到它似乎工作,触发只有一次,早上 8 点。

currentCalendar.timeZone = NSTimeZone.defaultTimeZone()

【问题讨论】:

【参考方案1】:

在设置新通知之前,您会在任何地方取消之前的通知吗?

在你的方法开始时试试这个

UIApplication.sharedApplication().cancelAllLocalNotifications()

看看有没有帮助。

【讨论】:

谢谢,虽然我确实处理通知取消。我已经用解决方案更新了我的问题。【参考方案2】:

这是最新的代码

UIApplication.shared.cancelAllLocalNotifications()

【讨论】:

以上是关于本地通知在计划外的时间多次触发的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止计划的本地通知在特定日期后触发?

定期快速触发本地通知

如果在 iOS 设置中禁用通知访问时安排本地通知,则不会在 iOS 13 上触发本地通知

将本地通知设置为仅在清醒时间触发

为啥本地通知未针对 UNCalendarNotificationTrigger 触发

Obj-C - 在特定时间触发本地通知?