前提・実現したいこと
Swiftでアプリの設定画面においてピッカーで時間を指定し、その時間に毎日通知を出す機能を作りたいと思っています。
具体的には設定画面で指定した時間をそれぞれUserDefaultsで登録し、AppDelegateにて通知の設定をしたいです。
発生している問題・エラーメッセージ
ピッカーで選択した時間になっても通知が来ません。
該当のソースコード
swift
1設定画面 2 3UserDefaults.standard.set(str2, forKey: "Alarm1") 4//"Alarm1"に時間を入力 (例)21:30 5 6let hour : Int = Int(UserDefaults.standard.string(forKey: "Alarm1")!.prefix(2))! 7//指定した時間の前2文字をInt型で格納 (例)21 8let minute : Int = Int(UserDefaults.standard.string(forKey: "Alarm1")!.suffix(2))! 9//指定した分の前2文字をInt型で格納 (例)30 10 11UserDefaults.standard.set(hour, forKey: "Alarm1:hour") 12//時間をキーを"Alarm1:hour"としてUserDefaultsで登録 13UserDefaults.standard.set(minute, forKey: "Alarm1:minute") 14//分をキーを"Alarm1:minute"としてUserDefaultsで登録 15 16 17AppDelegate 18 19let content = UNMutableNotificationContent() 20 content.title = "hoge" 21 content.body = "hogehoge" 22 content.sound = UNNotificationSound.default 23 24let date = DateComponents(hour: UserDefaults.standard.integer(forKey: "Alarm1:hour"), minute: UserDefaults.standard.integer(forKey: "Alarm1:minute")) 25//ここで通知する時間を設定 26 27let trigger = UNCalendarNotificationTrigger.init(dateMatching: date, repeats: true) 28let request = UNNotificationRequest.init(identifier: "TestNotification", content: content, trigger: trigger) 29let center = UNUserNotificationCenter.current() 30center.add(request) 31center.delegate = self
試したこと
DateComponentsにおいて具体的な数字をAppDelegate上で入れた場合はきちんと機能いたしましたがUserDefaultsを使うとうまくいきません。
補足情報(FW/ツールのバージョンなど)
Xcode 13.1
あなたの回答
tips
プレビュー