Как установить время начала и окончания повторного локального уведомления? - PullRequest
0 голосов
/ 12 июня 2018

Я пытался повторить уведомление с UNCalendarNotificationTrigger(dateMatching:, repeats:), но этот метод может повторяться только в определенное время.

Я также попытался UNTimeIntervalNotificationTrigger(timeInterval:, repeats:) и повторил уведомление с интервалом времени, но этот метод не смог установить время начала push-уведомления.

И эти два метода, кажется, не имеют местаустановить время для окончания push-уведомлений.

Я хочу начать с особого времени и повторять уведомления через равные промежутки времени.Что мне делать?

1 Ответ

0 голосов
/ 14 июня 2018

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

let notifIDPrefix = "mynotif"
let notifCategory = "com.mydomain.mynotif" // this should have been registered with UNUserNotificationCenter

func scheduleNotifs(from startDate: Date, to endDate: Date, with interval: TimeInterval) {
    var curDate = startDate
    var count: Int = 0
    while curDate.compare(endDate) != .orderedDescending {
        scheduleNotif(with: "\(notifIDPrefix)_\(count)", date: curDate)
        curDate = curDate.addingTimeInterval(interval)
        count += 1
    }
}

private func scheduleNotif(with identifier: String, date: Date) {

    let content = UNMutableNotificationContent()
    content.title = "My Title"
    content.body = " "
    content.categoryIdentifier = notifCategory
    content.sound = UNNotificationSound.default()

    let triggerTime = Calendar.current.dateComponents([.year, .day, .hour, .minute, .second], from: date)
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerTime, repeats: false)
    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)

    let center = UNUserNotificationCenter.current()
    center.add(request) { (error : Error?) in
        if let theError = error {
            print(theError.localizedDescription)
        }
    }
}

Следующее будет запланировать 3 уведомления (через 1, 2 и 3 минуты)).

    let startDate = Date().addingTimeInterval(60)
    let endDate = startDate.addingTimeInterval(60 * 2)
    let interval: TimeInterval = 60
    scheduleNotifs(from: startDate, to: endDate, with: interval)
...