Запуск всех ожидающих уведомлений до установленного для него времени
В приложении, которое я разрабатываю, есть опция для запуска уведомления x количество времени до фактического времени, установленного для указанного уведомления. Например я установил напоминание на 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)
}
}
Но теперь я получаю сообщение об ошибке, в котором говорится, что "триггер" является свойством только для получения.
1 ответ
Невозможно изменить время срабатывания запланированного уведомления, вы можете удалить их все и повторно запланировать