本地通知立即触发,而不是按计划触发

Posted

技术标签:

【中文标题】本地通知立即触发,而不是按计划触发【英文标题】:Local notifications firing immediately instead of when they are scheduled 【发布时间】:2016-06-02 08:33:11 【问题描述】:

我一直在尝试在工作日安排本地通知,但它们似乎是立即触发,而不是在我安排它们时触发。这是我在didFinishLaunchingWithOptions 中的 AppDelegate 中的代码:

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
        var notification = UILocalNotification()
        var components = NSDateComponents()
        var calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)
        components.weekday = 5
        components.hour = 9
        components.minute = 24
        notification.alertBody = "Notification test"
        notification.fireDate = calendar?.dateFromComponents(components)
        UIApplication.sharedApplication().scheduleLocalNotification(notification)

关于为什么它可能不起作用的任何线索?

【问题讨论】:

打印你的开火日期,你会看到的。 嗯,打印组件会给我一个正确的结果(我定义的那个),但是 fireDate 给了我 0001-01-01 10:00:45 +0000。 dateFromComponents 是否不像我认为的那样工作? 是的。它只是将给定的组件设置为空日期。你也想设置day 而不是weekday 哦,我明白了。我设置了工作日,因为我希望它在一周中的某一天关闭,在这种情况下是星期四。这不是正确的做法吗? 不,阅读这个***.com/a/9855208/771231 【参考方案1】:

正如其他人所提到的,确保指定components 对象的yearmonth 属性。

components.year = 2016
components.month = 6

您的代码的当前触发日期的一部分如下:

0001-01-01

这意味着通知将在 1 月的“1”年触发,而不是 2016 年。

【讨论】:

【参考方案2】:

你需要使用notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];

【讨论】:

【参考方案3】:

尝试设置年/月,因为它是从 01/01/1970 创建的,所以日期是过去的 => 立即触发

【讨论】:

以上是关于本地通知立即触发,而不是按计划触发的主要内容,如果未能解决你的问题,请参考以下文章

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

iOS8中的本地通知触发代码可以吗?

如何设置在第一次设置通知后每秒钟触发一次的本地通知?

如何设置首次设置通知后每秒触发的本地通知?

检测应用程序处于后台/非活动状态时是不是触发了本地通知

如何在 iOS 中触发通知时打开警报视图?