Имейте триггер UNNotification через часовые пояса

Я не могу нормально запустить локальное уведомление iOS 10 (UNNotification) во всех часовых поясах.

В часовом поясе +10 часов, я хочу, чтобы он срабатывал в 17:00:00 и планировал его.

Позже, когда я смотрю, какие уведомления запланированы, я получаю следующую дату их запуска, все еще в часовом поясе +10 часов, это будет 17:00:00.

Но когда я изменяю часовой пояс на устройстве на +8 часов и смотрю, какие уведомления запланированы, я получаю следующую дату его срабатывания, и он по- прежнему показывает 17:00:00. Я ожидал, что он выстрелит двумя часами раньше, в 15:00:00.

Как я могу заставить это работать так? Я попытался изменить часовой пояс календаря, используемого для создания компонентов даты, подаваемых в UNCalendarNotificationTrigger (пробовал следующие вещи: TimeZone.init(identifier: "Somewhere"), TimeZone.autoupdatingCurrentвозможно другие). Но это просто не изменится, AFAIK Я всегда получаю одну и ту же дату пожара, даже если я меняю часовые пояса.

1 ответ

UNTimeIntervalNotificationTrigger может решить эту проблему.

Вы можете рассчитать разницу между установленной датой и текущей датой, а затем запланировать запуск временного интервала.

func timeIntervalTrigger(from date: Date, repeats: Bool) -> UNTimeIntervalNotificationTrigger {
    let timeInterval = date.timeIntervalSinceNow
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterval, repeats: repeats)
    return trigger
}
Другие вопросы по тегам