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

时间:2017-01-07 20:47:02

标签: ios swift nsdate nsdatecomponents 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)")

然后我得到以下输出:

  

dateComponents = calendar:gregorian(current)timeZone:Europe / Stockholm(current)era:1年:2017月:1天:8小时:21分钟:34秒:0纳秒:0个工作日:1个工作日第二个季度:2个季度:0 weekOfMonth:1 weekOfYear:1 yearForWeekOfYear:2017 isLeapMonth:false

     

nextDate = nil

问题:为什么trigger.nextTriggerDate() = nil

更新:我觉得我的dateComponents可能超定。因此,我引入了一个仅包含dateComponents的日期时间和分钟的nextEvent

 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。

1 个答案:

答案 0 :(得分:6)

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

如果您手动设置quarter = 1或仅dateComponents.quarter = 1,则一切都会开始有效。