Добавление EKRecurrenceRule в напоминание не работает (создание проблемы с повторяющимся событием) - PullRequest
0 голосов
/ 06 мая 2020

У меня есть функция, которая добавляет новое напоминание. В этой функции напоминание будет иметь название напоминания и будильник на определенный c день и время.

В настоящее время функция выглядит так:

var eventStore = EKEventStore()
var reminders = [EKReminder]()

func addReminder(date: Date, reminderTitle: String) {
    eventStore.requestAccess(to: EKEntityType.reminder, completion: {
        granted, error in
        if (granted) && (error == nil) {
            let reminder:EKReminder = EKReminder(eventStore: self.eventStore)
            reminder.title = reminderTitle

            let alarmTime = date
            let alarm = EKAlarm(absoluteDate: alarmTime)
            reminder.addAlarm(alarm)
            reminder.calendar = self.eventStore.defaultCalendarForNewReminders()

            do {
                try self.eventStore.save(reminder, commit: true)
            } catch {
                print("Cannot save")
                return
            }
            print("Reminder saved")
        }
    })
}

Теперь я хотел бы добавить EKRecurrenceRule, которое будет повторять будильник / напоминание еженедельно навсегда (без указания c дата окончания).

Для лучшего объяснения это пример того, как я хочу, чтобы мое напоминание выглядело в конце: Пример

Это мой подход уже пробовал:

let recurrenceRule = EKRecurrenceRule(recurrenceWith: .weekly, interval: 1, daysOfTheWeek: [EKRecurrenceDayOfWeek(.monday)], daysOfTheMonth: nil, monthsOfTheYear: nil, weeksOfTheYear: nil, daysOfTheYear: nil, setPositions: nil, end: nil)
reminder.addRecurrenceRule(recurrenceRule)

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

Любая помощь в том, как успешно сохранить напоминание?

1 Ответ

0 голосов
/ 21 мая 2020

РЕШЕНИЕ: Чтобы иметь работающее повторяющееся событие / напоминание, напоминание должно иметь определенный срок.

if(reminder.recurrenceRules?.count ?? 0 > 0 && reminder.dueDateComponents == nil) {
     let calendar = Calendar.current
     let components = calendar.dateComponents([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year], from: date)
     reminder.dueDateComponents = components
}
...