ios - 快速用户通知 : why is nextTriggerDate nil?

标签 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 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,一切都会开始工作。

关于ios - 快速用户通知 : why is nextTriggerDate nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41526377/

相关文章:

ios - 在 numberOfItemsInSection 返回非零项目编号后未调用 UICollectionView cellForItemAtIndexPath

ios - 删除 subview 并将其添加到自定义 UITableViewCell

swift - 函数返回 2 种以上类型是 Swift 中的最佳方式吗?

ios - 解码混淆值 - 无法将数据转换为字符串

iphone - NSDateFormatter 没有返回正确的日期

ios - 本地化描述,英文截图

objective-c - 修改 iOS 中的 BOOL 内部方法

ios - 无法在 Collection View 中显示存储在 App Delegate 中的数组数据

ios - 来自字符串的日期在 iOS 中不起作用

objective-c - 在 iOS SDK 中获取周数