快速用户通知:为什么nextTriggerDate为零?

rag*_*ius 2 nsdate nsdatecomponents ios swift usernotifications

当我执行以下操作时(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)")
Run Code Online (Sandbox Code Playgroud)

然后我得到以下输出:

dateComponents = calendar:gregorian(current)timeZone:Europe/Stockholm(当前)时代:1年:2017月:1天:8小时:21分钟:34秒:0纳秒:0个工作日:1个工作日原点:2个季度:0个星期一个月:1周年份:1年ForWeekOfYear:2017年是LeapMonth: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)
Run Code Online (Sandbox Code Playgroud)

当我现在调用trigger.nextTriggerDate()它成为

nextDate = Optional(2017-01-08 20:34:00 +0000)
Run Code Online (Sandbox Code Playgroud)

正如它应该.但是我不明白为什么在创建触发器时我不能使用dateComponents.

Sul*_*han 7

在我的测试中,我发现dateComponents.quarter = 0是问题的原因.零季度显然是错误的,它应该是quarter = 1似乎有一个旧的错误导致日期组件有一个无效的季度.

如果你手动设置dateComponents.quarter = 1或只是dateComponents.quarter = nil,一切都开始工作.

  • 我编辑了以前的答案,因为它不是很具体。我想我找到了问题的真正原因。 (2认同)