所以我可以使用以下代码获取下一个通知:
if($row['online'] = "online")
触发器让我......
小时:16 分钟:10 第二:0,重复:是>
但我无法调用trigger.dateComponents
我如何获得此日期?
答案 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)
}
}