Запуск всех ожидающих уведомлений до установленного для этого времени

В приложении, которое я разрабатываю, есть опция для запуска уведомления на количество времени до фактического времени, установленного для указанного уведомления. Например, я установил напоминание на 10:00. Но в локальных настройках приложения я установил, чтобы уведомление запускалось за 10 минут до установленного времени. Итак, в этом примере уведомление сработает в 9:50.

Теперь я могу сделать то же самое, когда устанавливаю время для индивидуального уведомления. Но что я хочу сделать, так это вызвать все ожидающие уведомления до фактического установленного для них времени.

Это функция, которую я использую для установки уведомлений:

func scheduleNotification(at date: Date, identifier: String, threadIdentifier: String, body: String) {
    let calendar = Calendar(identifier: .gregorian)
    let components = calendar.dateComponents(in: .current, from: date)
    let newComponents = DateComponents(calendar: calendar, timeZone: .current, year: components.year, month: components.month, day: components.day, hour: components.hour, minute: components.minute)

    let trigger = UNCalendarNotificationTrigger(dateMatching: newComponents, repeats: false)

    let content = UNMutableNotificationContent()
    content.title = "TestNotification"
    content.body = body
    content.threadIdentifier = threadIdentifier
    content.sound = UNNotificationSound.default()

    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)

    UNUserNotificationCenter.current().add(request) {
        error in

        if let error = error {
            print("Error in delivering notification. Error: \(error.localizedDescription)")
        }
    }
}

Дата исходит из даты, установленной средством выбора даты. Я попытался изменить свойства триггера с помощью этого кода:

UNUserNotificationCenter.current().getPendingNotificationRequests { (requests) in
    for request in requests {
            request.trigger = UNTimeIntervalNotificationTrigger(timeInterval: 10*60, repeats: false)
    }
}

Но теперь я получаю сообщение об ошибке, в котором говорится, что «триггер» - это свойство только для получения.


person Parthib Biswas    schedule 16.02.2018    source источник


Ответы (1)


Невозможно изменить время срабатывания запланированного уведомления, вы можете удалить их все и снова перенастроить

person Sh_Khan    schedule 16.02.2018
comment
Перенося их все, вы имеете в виду настраивать уведомления одно за другим заново? - person Parthib Biswas; 16.02.2018
comment
обычно вы связываете каждое уведомление с идентификатором, чтобы зациклить все и изменить конкретный, но если вы хотите изменить время срабатывания для всех, тогда да, один за другим - person Sh_Khan; 16.02.2018