【Swift4】UNUserNotificationCenterで通知が出ない。.quarterが邪魔だった。

以前の投稿で5秒後に通知を出すというところまでやった。
【Swift4】【Objective-C】UNUserNotificationCenterで通知の許可をもらう。 | iPhoneアプリ備忘録

しかし、現在時刻を取得して5秒後の時刻に鳴るようにしても通知が来ない。
なのでいろいろ試してみた。

まずは前回の復習から。
AppDelegateでゴニョゴニョしてViewControllerで前回も書いた5秒後に通知のコードを書いて、
未通知を呼び出すコードを書いてみる。

これを走らせるとデバッグエリアに通知の設定が表示されて5秒後に通知が出る。

今度はトリガーをインターバルのUNTimeIntervalNotificationTriggerから
カレンダーのUNCalendarNotificationTriggerで、現在時刻をDate()で取得し5秒後を指定してみる。
コードはこんな感じ。

これを走らせると、下記の通り。

dateComponentsの内容だけで、ノーティフィケーションは表示されず通知も出なかった。
特にXcodeでエラーも出てないのにノーティフィケーションに登録されなかったようだ。

let date = Date() から取ってくるのではなく、
dateComponentsを指定すると通るので、dateComponentsの何かが悪さしているっぽいのでいろいろとnilを入れて試してみた。

var dateComponents = DateComponents()
dateComponents = Calendar.current.dateComponents(in: TimeZone.current, from:Date() + 5)
// dateComponents.calendar = nil
// dateComponents.timeZone = nil
// dateComponents.era = nil
// dateComponents.year = nil
// dateComponents.weekday = nil
// dateComponents.yearForWeekOfYear = nil
// dateComponents.weekOfYear = nil
// dateComponents.weekOfMonth = nil
// dateComponents.weekdayOrdinal = nil
dateComponents.quarter = nil
print(“でーとこんぽーねんつ”,dateComponents)

結果、dateComponents.quarter が入ってると駄目なようだ。
これで一日費やした。/(^o^)\

オマケ。
アラームに使うために.quarterと秒数を取った日付の取り方。

参考サイト
DateComponentsの各要素について調べてみた – Swiftをはじめよう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です