Чтение и запись напоминаний

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

Поскольку EKReminder наследовался от EKCalendarItem, можно выполнить те же методы на напоминании, как Вы были бы на событии, таком как добавление предупреждения с addAlarm: или устанавливание правила повторения с addRecurrenceRule:.

Получение напоминаний

Как с событиями, необходимо сначала установить соединение с хранилищем события для доступа к существующим напоминаниям. Посмотрите Соединение с Хранилищем События, если Вы уже не сделали так.

Инициализировать соединение с доступом к напоминаниям на OS X, передаче EKEntityMaskReminder вместо EKEntityMaskEvent.

EKEventStore *store = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskReminder];

На iOS 6 и позже, необходимо запросить доступ для использования базы данных Calendar пользователя с requestAccessToEntityType:completion: метод после хранилища события инициализируется. Запрашивать доступ к типу объекта асинхронно предлагает пользователю позволять или отклонять Ваше приложение от использования их информации календаря. Необходимо обработать случаи для того, когда пользователь предоставляет и запрещает доступа к приложению:

[store requestAccessToEntityType:EKEntityTypeReminder completion:^(BOOL granted, NSError *error) {
    // handle access here
}];

Вы не должны запрашивать доступ для напоминаний пользователя на OS X, потому что автоматически предоставляется доступ.

Точно так же, как поиск событий существует два способа получить напоминания.

Используя предикаты

Можно вызвать fetchRemindersMatchingPredicate:completion: получить доступ к многократным напоминаниям, соответствующим предикат. Передайте предикат, возвращенный одним из следующих методов:

Можно выполнить итерации через соответствующие напоминания путем передачи блока параметру завершения, как показано в Перечислении 2-1.

Перечисление 2-1  Выбирающие напоминания с предикатом

NSPredicate *predicate = [store predicateForRemindersInCalendars:nil];
 
[store fetchRemindersMatchingPredicate:predicate completion:^(NSArray *reminders) {
    for (EKReminder *reminder in reminders) {
        // do something for each reminder
    }
}];

Используя уникальные идентификаторы

Если Вы знаете уникальный идентификатор определенного напоминания от предыдущей выборки его с предикатом, можно вызвать calendarItemWithIdentifier: метод экземпляра. calendarItemWithIdentifier: может выбрать любой объект календаря (напоминания и события), тогда как eventWithIdentifier: выборки только события.

Создание и редактирование напоминаний

Можно создать напоминания с помощью reminderWithEventStore: метод класса. title и calendar свойства требуются. Календарь для напоминания является списком, с которым он сгруппирован.

Как события, напоминания могут инициировать основанные на времени или основанные на местоположении предупреждения для предупреждения пользователя определенной задачи. Считайте Предупреждения Конфигурирования для получения дополнительной информации о том, как присоединить предупреждения к объектам календаря.

Для соединения даты начала или даты оплаты с напоминанием используйте startDateComponents и dueDateComponents свойства. Для завершения напоминания установите completed свойство к YES, который автоматически устанавливает completionDate к текущей дате.

Сохранение и удаление напоминаний

Напоминания сохраняются подобным способом к событиям. Для сохранения напоминания к базе данных Calendar вызовите saveReminder:commit:error: метод. Для удаления события вызовите removeReminder:commit:error: метод.

Помните, title и calendar свойства должны явно быть установлены перед сохранением напоминания.