Планирование локальных уведомлений повторять ежедневно с завтрашнего дня в Swift

Я пытаюсь запланировать локальное уведомление, чтобы оно срабатывало каждый день (т.е. повторяется), в определенное время, но с завтрашнего дня.

т. е. "Запустить уведомление каждый день в 8 вечера, с завтрашнего дня"

Я использовал этот вопрос в качестве руководства, и я считаю, что я делаю то, что он говорит, но я все еще получаю уведомление сегодня, когда я запускаю следующий код (например, если я планирую уведомление до 8 вечера):

    func testDateNotification(){

    let content = UNMutableNotificationContent()
    content.title = "Test"
    content.body = "This is a test"
    let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: Date())

    let userCalendar = Calendar.current
    var components = userCalendar.dateComponents([.hour, .minute], from: tomorrow!)

    components.hour = 20
    components.minute = 00


    let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
    let request = UNNotificationRequest(identifier: "test", content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request) { (error) in
        if ((error) != nil){
            print("Error \(String(describing: error))")
        }
    }

}

1 ответ

import UserNotifications

  1. Проверить разрешение пользователя

            UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) {
    if $0 { } }
    
  2. Добавить уведомление

             let fromDate = Date(timeIntervalSince1970: Double(0.0))
    
     let dateComponent = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute, .second], from: fromDate)
    
     let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponent, repeats: true)
     print(trigger.nextTriggerDate() ?? "nil")
    
     let content = UNMutableNotificationContent()
     content.title = "title"
     content.body = "body"
     let request = UNNotificationRequest(identifier: "identify", content: content, trigger: trigger)
     UNUserNotificationCenter.current().add(request) { 
         if let error = $0 {
             print(error)
             return
         }else { 
             print("scheduled") 
         }
     }
    
Другие вопросы по тегам