Некалендарный триггер не работает с локальным уведомлением

#ios #swift #xcode #localnotification #uncalendarnotificationtrigger

#iOS #swift #xcode #локальное уведомление #некалендарный триггер

Вопрос:

Несмотря на то, что я потратил буквально несколько дней на этот код, я все еще не могу заставить его сработать должным образом. Я просмотрел много недавних онлайн-руководств, и мой код соответствует им всем, но все равно не будет вести себя должным образом при сборке на симуляторе или устройстве. Все, что я хочу, это чтобы локальное уведомление запускалось в определенное время каждый день (код показан при попытке 10:12 утра). Целью развертывания является iOS 14.3, и я использую последнюю версию swift 5. В отчаянии я даже попытался использовать метод time interval UNTimeIntervalNotificaitonTrigger для создания промежутка времени на следующий день, но это время от времени проверяется как на устройстве, так и на симуляторе (иногда срабатывает в секундах или минутах) Однако в идеале мне бы хотелось, чтобы он запускался в определенное время каждый день.

Я ничего не кодировал в AppDelegate или sceneDelegate, потому что учебные пособия, которым я следовал, вообще не работали. Весь этот код — это viewDidLoad ViewController, с которого я хочу, чтобы уведомление было авторизовано (это не начальный контроллер представления, если это имеет значение). Прошу о помощи!

         //STEP 1 - Ask user for permission to notify
        UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { success, error in
            if success {
                // TO REMOVE NOTIFICAITONS: UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
                print("All set with User Authorisation!")
            } else if let error = error {
                print("Oh No, Authorisation did not work: ", error.localizedDescription)
            }
        }
        
        //STEP 2 - Create Notification Content
        let content = UNMutableNotificationContent()
        content.title = "Daily Notification TITLE"
        content.subtitle = "Hey - this is your daily notification SUBTITLE"
        content.body = "This is the BODY of your daily notification"
        content.sound = UNNotificationSound.default
        
        
        //STEP 3 - Set up the Trigger by time each day
        var triggerTime = DateComponents()
        triggerTime.hour = 10
        triggerTime.minute = 12
        let myNotificationTrigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: true)

        // STEP 4 - Creating the Request
        let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: myNotificationTrigger)

        // Step 5 - Register the Request
        UNUserNotificationCenter.current().add(request) { (error) in
            if let error = error{
                print("Error has occured: (error.localizedDescription)")
            } else {
                print("Added Notification: (UUID().uuidString)")
            }
        }
        
    } // END OF THE viewDidLoad bracket
 

Комментарии:

1. Что вы подразумеваете под «не работает»?

2. @Sweeper спасибо — вообще не срабатывает. Авторизация работает без проблем, когда я обращаюсь к этому контроллеру представления.