如何在swift中获取即将发布的通知的日期?

时间:2017-11-05 22:07:01

标签: ios swift xcode unusernotificationcenter

所以我可以使用以下代码获取下一个通知:

if($row['online'] = "online")

触发器让我......

    小时:16     分钟:10     第二:0,重复:是>

但我无法调用trigger.dateComponents

我如何获得此日期?

4 个答案:

答案 0 :(得分:1)

您需要将UNNotificationTrigger转换为UICalendarNotificationTrigger并获取其nextTriggerDate

if let calendarNotificationTrigger = notifications.first?.trigger as? UNCalendarNotificationTrigger, 
    let nextTriggerDate = calendarNotificationTrigger.nextTriggerDate()  {
    print(nextTriggerDate)  
}

答案 1 :(得分:1)

使用nextTriggerDate()时需要小心。它可能会提供您不期望的日期。

请参阅以下Does UNTimeIntervalNotificationTrigger nextTriggerDate() give the wrong date?

我在使用时间间隔触发器时能够确认这种情况正在发生,这也可能会影响日历触发器。

虽然nextTriggerDate()提供的日期可能不是您所期望的,但操作系统的计划实际上是正确的。

在通知内容(UNNotificationContent)的userInfo属性中附加一些与日期相关的数据可能会有所帮助。

let content = UNMutableNotificationContent()
content.title = "Title"
content.body = "This is a test"
content.sound = UNNotificationSound.default()
content.userInfo = ["date" : Date()]

答案 2 :(得分:0)

您想使用dateComponents的{​​{1}}。尝试使用UNCalendarNotificationTrigger来检索它。

有关Apple开发人员文档的更多信息:https://developer.apple.com/documentation/usernotifications/uncalendarnotificationtrigger

答案 3 :(得分:0)

要获取下一个通知,您需要获取所有请求的日期并选择最低要求:

UNUserNotificationCenter.current().getPendingNotificationRequests {
    (requests) in
    var nextTriggerDates: [Date] = []
    for request in requests {
        if let trigger = request.trigger as? UNCalendarNotificationTrigger,
            let triggerDate = trigger.nextTriggerDate(){
            nextTriggerDates.append(triggerDate)
        }
    }
    if let nextTriggerDate = nextTriggerDates.min() {
        print(nextTriggerDate)
    }
}