Чтение и запись напоминаний
Напоминания являются задачами, которые могут быть связаны к определенному времени или расположению. Они подобны календарным событиям, но могут быть отмечены завершенные и могут не обязательно охватить точный промежуток времени.
Поскольку 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:
получить доступ к многократным напоминаниям, соответствующим предикат. Передайте предикат, возвращенный одним из следующих методов:
predicateForIncompleteRemindersWithDueDateStarting:ending:calendars:
находит неполные напоминания в дополнительном периоде времениpredicateForCompletedRemindersWithCompletionDateStarting:ending:calendars:
находит завершенные напоминания в дополнительном периоде времениpredicateForRemindersInCalendars:
находит все напоминания
Можно выполнить итерации через соответствующие напоминания путем передачи блока параметру завершения, как показано в Перечислении 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
свойства должны явно быть установлены перед сохранением напоминания.