swift 用户通知:为什么 nextTriggerDate 为零?
swift user notifications: why is nextTriggerDate nil?
当我 运行 以下内容时(2017 年 1 月 7 日):
let dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: date)
print("dateComponents = \(dateComponents)")
let trigger = UNCalendarNotificationTrigger(dateMatching:dateComponents, repeats: false)
let nextDate = trigger.nextTriggerDate()
print("nextDate = \(nextDate)")
然后我得到以下输出:
dateComponents = calendar: gregorian (current) timeZone: Europe/Stockholm (current) era: 1 year: 2017 month: 1 day: 8 hour: 21 minute: 34 second: 0 nanosecond: 0 weekday: 1 weekdayOrdinal: 2 quarter: 0 weekOfMonth: 1 weekOfYear: 1 yearForWeekOfYear: 2017 isLeapMonth: false
nextDate = nil
问题:为什么是trigger.nextTriggerDate() = nil
?
更新: 我觉得我的 dateComponents
可能 过度确定 。因此,我引入了一个 nextEvent
,它只包含 dateComponents 的天时和分钟:
var nextEvent = DateComponents()
nextEvent.day = dateComponents.day
nextEvent.hour = dateComponents.hour
nextEvent.minute = dateComponents.minute
let trigger = UNCalendarNotificationTrigger(dateMatching:nextEvent, repeats: false)
当我现在调用 trigger.nextTriggerDate()
时,它变成了
nextDate = Optional(2017-01-08 20:34:00 +0000)
这是应该的。但是我不明白为什么我在创建触发器时不能使用dateComponents。
在我的测试中,我发现 dateComponents.quarter = 0
是问题的原因。零季度显然是错误的,应该是 quarter = 1
似乎有一个旧的 bug 导致日期组件有一个无效的季度。
如果您手动设置 dateComponents.quarter = 1
或只是 dateComponents.quarter = nil
,一切都会开始工作。
当我 运行 以下内容时(2017 年 1 月 7 日):
let dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from: date)
print("dateComponents = \(dateComponents)")
let trigger = UNCalendarNotificationTrigger(dateMatching:dateComponents, repeats: false)
let nextDate = trigger.nextTriggerDate()
print("nextDate = \(nextDate)")
然后我得到以下输出:
dateComponents = calendar: gregorian (current) timeZone: Europe/Stockholm (current) era: 1 year: 2017 month: 1 day: 8 hour: 21 minute: 34 second: 0 nanosecond: 0 weekday: 1 weekdayOrdinal: 2 quarter: 0 weekOfMonth: 1 weekOfYear: 1 yearForWeekOfYear: 2017 isLeapMonth: false
nextDate = nil
问题:为什么是trigger.nextTriggerDate() = nil
?
更新: 我觉得我的 dateComponents
可能 过度确定 。因此,我引入了一个 nextEvent
,它只包含 dateComponents 的天时和分钟:
var nextEvent = DateComponents()
nextEvent.day = dateComponents.day
nextEvent.hour = dateComponents.hour
nextEvent.minute = dateComponents.minute
let trigger = UNCalendarNotificationTrigger(dateMatching:nextEvent, repeats: false)
当我现在调用 trigger.nextTriggerDate()
时,它变成了
nextDate = Optional(2017-01-08 20:34:00 +0000)
这是应该的。但是我不明白为什么我在创建触发器时不能使用dateComponents。
在我的测试中,我发现 dateComponents.quarter = 0
是问题的原因。零季度显然是错误的,应该是 quarter = 1
似乎有一个旧的 bug 导致日期组件有一个无效的季度。
如果您手动设置 dateComponents.quarter = 1
或只是 dateComponents.quarter = nil
,一切都会开始工作。