4

以下を実行すると(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: グレゴリオ暦 (現在) timeZone: ヨーロッパ/ストックホルム (現在) era: 1 年: 2017 月: 1 日: 8 時間: 21 分: 34 秒: 0 ナノ秒: 0 平日: 1 weekdayOrdinal: 2 四半期: 0 weekOfMonth : 1 weekOfYear: 1 yearForWeekOfYear: 2017 isLeapMonth: false

次の日付 = なし

質問: なぜ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 を使用できない理由がわかりません。

4

1 に答える 1

9

テスト中dateComponents.quarter = 0に、問題の原因であることがわかりました。ゼロ四半期は明らかに間違っています。日付コンポーネントに無効な四半期が含まれるquarter = 1古いバグがあるようです。

dateComponents.quarter = 1またはを手動で設定するとdateComponents.quarter = nil、すべてが機能し始めます。

于 2017-01-07T21:29:49.000 に答える