У меня есть приложение, которое извлекает напоминания пользователя после получения разрешения. То же приложение также может обновлять дату выполнения.
Сегодня я заметил, что приложение «Напоминания» неточно отражает новую дату выполнения EKReminders, установленную в моем приложении.
Странно то, что при получении напоминаний через EKEventStore я получаю ожидаемые сроки выполнения. Итак, похоже, что существует локальная копия EKEventStore, которую мое приложение обновляет и на которую ссылается, и которая не синхронизируется обратно с EKEventStore, которое использует приложение «Напоминания». Несмотря на это, обновления состояния, похоже, надежно синхронизируются с кешем моего приложения, когда что-то меняется в приложении «Напоминания».
Обновления событий календаря работают в обоих направлениях.
Как я обновляю напоминания:
Код: Выделить всё
func scheduleReminder(_ reminder: EKReminder, to date: Date) throws {
reminder.dueDateComponents = Calendar.current.dateComponents(
[.year, .month, .day, .hour, .minute], from: date
)
try eventStore.save(reminder, commit: true) // stable EKEventStore
recordChange()
}
Код: Выделить всё
//...
// Fetch scheduled reminders
group.enter()
let scheduledPredicate = store.predicateForIncompleteReminders(
withDueDateStarting: Date.distantPast, ending: Date.distantFuture,
calendars: selectedLists
)
store.fetchReminders(matching: scheduledPredicate) { reminders in
let scheduled = (reminders ?? []).filter { $0.dueDateComponents != nil }
allReminders.append(contentsOf: scheduled)
group.leave()
}
// Fetch unscheduled reminders
group.enter()
let unscheduledPredicate = store.predicateForIncompleteReminders(
withDueDateStarting: nil, ending: nil, calendars: selectedLists
)
store.fetchReminders(matching: unscheduledPredicate) { reminders in
let unscheduled = (reminders ?? []).filter { $0.dueDateComponents == nil }
allReminders.append(contentsOf: unscheduled)
group.leave()
}
//...
Подробнее здесь: https://stackoverflow.com/questions/798 ... -and-not-b
Мобильная версия