Если не синхронизируются данные в приложениях «Контакты iCloud», «Календари iCloud» или «Напоминания iCloud»
Узнайте, что делать, если ваши контакты, календари или напоминания iCloud отображаются не на всех устройствах, которые вы используете с iCloud.
Что нужно проверить в первую очередь
- Проверьте состояние системы контактов, календарей или напоминаний iCloud на наличие перебоев в работе сервисов или проблем с подключением.
- Если напоминание не отображается на некоторых ваших устройствах, убедитесь, что на ваших iPhone и iPad установлена последняя версия iOS или iPadOS либо что на компьютере Mac установлена последняя версия macOS.
- Убедитесь, что на всех ваших устройствах выполнен вход в iCloud с использованием одного и того же идентификатора Apple ID. Затем убедитесь, что контакты, календари и напоминания включены в настройках iCloud.
- Проверьте правильность настроек даты и времени на устройстве для своего текущего местоположения.
- Если вы используете iCloud для Windows для синхронизации приложений «Контакты» и «Календарь» с Outlook на компьютере с Windows, убедитесь, что выполнено обновление до последней версии Windows. Затем выполните приведенные ниже действия, чтобы выйти из системы и снова войти в нее.
Выполните действия для своего устройства
Если решить проблему не удалось, выполните действия для соответствующего устройства, перечисленные ниже.
iOS и iPadOS
После каждого действия проверяйте свои контакты, календари или напоминания.
Перезапуск приложения «Контакты», «Календарь» или «Напоминания»
- Закройте приложение.
- Вернитесь на экран «Домой».
- Подождите около минуты, затем откройте приложение снова.
Обновление контактов и календарей
Для обновления контактов откройте приложение «Контакты» и смахните вниз по списку. Чтобы обновить группы контактов, нажмите «Списки» в левом верхнем углу, а затем смахните вниз по списку.
Чтобы обновить календари, выполните следующие действия:

- Откройте приложение «Календарь».
- Перейдите на вкладку «Календари».
- Смахните список вниз, чтобы обновить события.
Проверка настроек приложения
Если вы используете несколько групп или учетных записей в приложении «Контакты» или «Календари», убедитесь, что настроено отображение ваших контактов и календарей iCloud:
- Откройте приложение «Контакты» и нажмите «Списки» в левом верхнем углу. Убедитесь, что выбран параметр «Все iCloud».
- Откройте приложение «Календарь» и выберите вкладку «Календари». Убедитесь, что выбраны все календари iCloud.
Измените интервал обновления календарей:
- Нажмите «Настройки», а затем — «Календарь».
- Выберите пункт «Синхронизация».
- Если выбран вариант «Все события», выберите определенный период, например «Прошедший месяц». Если выбран определенный период времени, выберите вариант «Все события».
- Вернитесь на экран «Домой».
- Подождите несколько минут и откройте приложение «Календарь». Перейдите на вкладку «Календари» и смахните вниз, чтобы обновить данные.
Поскольку календарь iCloud «Дни рождения» обновляется ежедневно, изменения дней рождения могут отображаться в приложении «Календари» только на следующий день.
Выбор приложения «Контакты iCloud», «Календари iCloud» или «Напоминания iCloud» в качестве используемого по умолчанию
Если контакты, календари и напоминания хранятся в iCloud, приложение iCloud автоматически обновляет данные. Если ваши данные хранятся в сторонней учетной записи, такой как Google или Yahoo, вы можете изменить учетную запись по умолчанию на iCloud. Изменение учетной записи по умолчанию на iCloud не приведет к переносу существующих данных из стороннего сервиса в iCloud.
Контакты
Узнайте, в какой учетной записи хранятся контакты:
В iOS 16 или более поздней версии сделайте следующее.
- Откройте приложение «Контакты» и нажмите «Списки» в левом верхнем углу.
- Выберите «Все iCloud» для отображения списка контактов в iCloud. Если в списке отсутствует нужный контакт, возможно, он хранится в другой учетной записи.
- Нажмите «Списки» в левом верхнем углу и выберите «Все [учетная запись]», чтобы проверить каждую отдельную учетную запись, настроенную для приложения «Контакты».
- При наличии копии контактов из стороннего сервиса в формате vCard 3.0 или более поздней версии их можно импортировать в iCloud.
В iOS 15 или более ранней версии сделайте следующее.
- Нажмите «Группы» в левом верхнем углу окна приложения «Контакты».
- Снимите флажок рядом с параметром «Все [учетная запись]» для таких сторонних сервисов, как Gmail или Yahoo.
- Убедитесь, что выбран параметр «Все iCloud».
- Выберите команду «Готово» для просмотра списка контактов. Если нужный контакт найти не удается, значит, он создан в другой учетной записи.
- Если у вас есть копия ваших контактов из стороннего сервиса в формате vCard 3.0 или более поздней версии, вы можете импортировать контакты в iCloud.
Установите iCloud в качестве учетной записи по умолчанию для контактов:
- Перейдите в меню «Настройки» и выберите пункт «Контакты».
- Нажмите «Уч. зап. по умолчанию».
- Выберите iCloud.
Календари и напоминания
Чтобы проверить, в какой учетной записи находятся календари, откройте приложение «Календарь» и перейдите на вкладку «Календари».
Выберите календарь iCloud в качестве используемого по умолчанию:

- Перейдите в меню «Настройки» и выберите пункт «Календарь».
- Нажмите «По умолчанию».
- Нажмите календарь в разделе iCloud, чтобы сделать его используемым по умолчанию.
Настройте список напоминаний iCloud в качестве используемого по умолчанию:
- Перейдите в меню «Настройки» и выберите пункт «Напоминания».
- Нажмите «Список по умолчанию».
- Нажмите список в разделе iCloud, чтобы сделать его используемым по умолчанию.
Удаление просроченных напоминаний
- Откройте приложение «Напоминания».
- Перейдите в представление «Сегодня» и проверьте, нет ли у вас просроченных напоминаний.
- Если таковые есть, нажмите пустой кружок, чтобы завершить напоминание, или удалите его.
Повторите эти действия на каждом устройстве, на котором используются напоминания iCloud.
Перезапуск iPhone, iPad или iPod touch
- Узнайте, как перезапустить iPhone.
- Узнайте, как перезапустить iPad.
- Узнайте, как перезапустить iPod touch.

Принудительная синхронизация данных приложения «Календарь» на Apple Watch
- Откройте приложение Watch на iPhone и перейдите на вкладку «Мои часы».
- Нажмите «Основные», а затем — «Сброс».
- Нажмите «Сбросить данные синхронизации».
Если часы Apple Watch для вас настроил член семьи, вы не можете выполнить принудительную синхронизацию данных приложения «Календарь».

macOS
После каждого действия проверяйте свои контакты, календари или напоминания.
Обновление календарей
Календари можно обновить с помощью приложения «Календарь»:
- Откройте приложение «Календарь».
- В меню «Вид» выберите пункт «Обновить календари».
Так как календарь iCloud «Дни рождения» обновляется каждый час, изменения дней рождения в приложении «Контакты» или «Календари» за последний час могут не отобразиться сразу.
Проверка учетной записи приложений «Календарь», «Напоминания» и «Контакты» по умолчанию
Если события календаря хранятся и редактируются в учетной записи iCloud, а не в какой-либо другой, например «На моем Mac», Exchange или Google, iCloud будет обновлять календари автоматически. Если на компьютере Mac настроено несколько разных учетных записей, например iCloud, Gmail и Yahoo, убедитесь, что учетной записью по умолчанию является именно календарь iCloud:
- Откройте приложение «Календарь».
- Выберите «Календарь» > «Настройки». В macOS Monterey или более ранней версии выберите «Календарь» > «Настройки».
- На вкладке «Основные» календарем по умолчанию должен быть выбран один из календарей iCloud.
Если контакты хранятся и редактируются в учетной записи iCloud, а не в какой-либо другой, например «На моем Mac», Exchange или Google, iCloud будет обновлять контакты автоматически. Если вы используете несколько учетных записей на компьютере Mac, например iCloud, Gmail и Yahoo, убедитесь, что iCloud является учетной записью приложения «Контакты» по умолчанию:
- Откройте приложение «Контакты».
- Выберите «Контакты» > «Учетные записи».
- Перейдите на вкладку «iCloud». Проверьте, выполнен ли вход в систему с помощью идентификатора Apple ID и включены ли контакты.
Если в настройках iCloud включены напоминания, напоминания iCloud будут отображаться на компьютере Mac.
Удаление завершенных или просроченных напоминаний
- Откройте приложение «Напоминания».
- Перейдите в представление «Сегодня» и проверьте, нет ли у вас просроченных напоминаний.
- Если таковые есть, нажмите пустой кружок, чтобы завершить напоминание, или удалите его.
Повторите эти действия на каждом устройстве, на котором используются напоминания iCloud.
Перезапуск компьютера
После перезапуска компьютера проверьте, устранена ли проблема.
Использование напоминаний на устройстве iPhone, iPad или iPod touch
С помощью приложения «Напоминания» в iOS 13 и более поздних версий или iPadOS можно создавать напоминания с подзадачами и вложениями, а также устанавливать оповещения по времени и месту.
- Подготовка
- Создание напоминания
- Редактирование напоминания
- Получение уведомления при отправке сообщения определенному пользователю
- Создание подзадач
- Отметка напоминания как завершенного
- Добавление напоминания с помощью Siri
- Добавление напоминания из другого приложения
- Дополнительная информация
Подготовка
- Настройте iCloud, чтобы поддерживать напоминания в актуальном состоянии на всех устройствах. Откройте приложение «Настройки», затем нажмите «[ваше имя]» > «iCloud» и включите «Напоминания». В приложении «Напоминания» можно просмотреть все напоминания на всех устройствах Apple, на которых выполнен вход с использованием одного идентификатора Apple ID.
- Узнайте больше о том, как обновить напоминания iCloud после обновления до iOS 13 или более поздних версий и iPadOS.
Создание напоминания

- Откройте приложение «Напоминания».
- Нажмите + «Новое напоминание» и введите текст напоминания.
Можно также добавлять напоминания в свои самые важные списки дел с помощью виджета «Напоминания» на экране «Домой».
Установка срока
![]()
Нажмите кнопку «Дата и время» , чтобы установить срок для напоминания. Выберите «Сегодня», «Завтра» или «На этих выходных» либо нажмите «Дата и время», чтобы самостоятельно задать день и время.
Если для напоминания установлен срок, но не задано время, уведомление по умолчанию появляется в 9:00 утра. Чтобы изменить время появления уведомлений для напоминаний на весь день, откройте приложение «Настройки», а затем откройте «Напоминания». Нажмите время под разделом «Напоминания на весь день», затем выберите другое время.
Добавление места
![]()
Нажмите кнопку «Геопозиция» , чтобы назначить уведомление на основе вашей геопозиции. Выберите один из предложенных вариантов либо нажмите «Настроить», чтобы добавить место самостоятельно; выберите время срабатывания уведомления: по прибытии или после ухода; и задайте периметр зоны, в которой срабатывает напоминание.
Чтобы получать уведомления на основе геопозиции, убедитесь, что включены службы геолокации. Откройте приложение «Настройки», нажмите «Конфиденциальность» > «Службы геолокации» и включите службы геолокации.
Добавление тега
![]()
Нажмите кнопку «Тег» , чтобы добавить тег. Теги позволяют быстро и автоматически упорядочивать напоминания по ключевым словам. Узнайте больше об использовании тегов для упорядочения напоминаний.
Отметка напоминания флажком
![]()
Нажмите кнопку «Установить флажок» , чтобы отметить напоминание как особо важное и поместить его в смарт-список «С флажком» на главном экране приложения «Напоминания».
Добавление вложения
![]()
Нажмите кнопку «Фото» , чтобы добавить вложение в напоминание. Можно сделать новую фотографию, выбрать изображение из медиатеки или отсканировать документ.
Редактирование напоминания
![]()
Нажмите кнопку «Изменить сведения» , чтобы добавить в напоминание дополнительные сведения и настройки, например заметки, URL-адрес и приоритет. Кроме того, можно изменить настройки уведомления для напоминания и список, к которому это напоминание относится.
Получение уведомления при отправке сообщения определенному пользователю
![]()
- Нажмите напоминание, а затем — кнопку «Изменить сведения» .
- Включите параметр «При отправке сообщения».
- Нажмите «Выбрать пользователя» и выберите имя в списке контактов.

При общении с этим человеком в следующий раз появится уведомление приложения «Напоминания».
Создание подзадач
В любое созданное напоминание можно добавить подзадачи. Например, напоминание о том, что необходимо собраться в поездку, может содержать список вещей, которые нужно взять с собой.
Подзадачи можно создавать несколькими способами.
![]()
- Нажмите и удерживайте напоминание, затем перетяните его на другое напоминание. Напоминание, которое вы перетянули, становится подзадачей другого напоминания.
- Смахните напоминание вправо, затем нажмите «Сместить вправо». Напоминание превращается в подзадачу напоминания, расположенного выше. Чтобы отменить действие, снова смахните напоминание вправо и нажмите «Сместить влево».
- Нажмите напоминание, а затем — кнопку «Изменить сведения» . Нажмите «Подзадачи» > «Добавить напоминание», затем введите подзадачу. Повторите эти действия для всех подзадач, которые необходимо создать.
Отметка напоминания как завершенного
![]()
Чтобы отметить напоминание как завершенное, нажмите пустой кружок рядом с ним. Чтобы просмотреть завершенные напоминания, нажмите кнопку «Еще» и «Показать завершенные».

Чтобы удалить напоминание, не отмечая его как завершенное, смахните его влево, затем нажмите «Удалить».
Если уведомление о напоминании выводится на экране блокировки, смахните напоминание влево. Нажмите «Просмотреть» и «Отметить как завершенное».
Добавление напоминания с помощью Siri
Можно попросить Siri запланировать напоминание на устройстве iOS или на часах Apple Watch*. Вот несколько примеров:
- Напоминай кормить собаку каждый день в 7:30
- Напомни проверить почту, когда я приду домой.
- Напомни зайти в гастроном, когда я уйду отсюда.
- Напомни позвонить Лизе завтра в 3 часа дня.
Добавьте домашний и рабочий адреса в свою карточку в приложении «Контакты», чтобы использовать Siri для добавления напоминаний по месту. Откройте приложение «Контакты» и нажмите «Моя карточка». Нажмите «Редактировать», добавьте рабочий или домашний адрес, затем нажмите «Готово».
* Siri использует службы геолокации, когда для напоминания указывается определенное место. Функции, команды и доступность Siri зависят от языка, страны и региона. Узнайте о поддержке той или иной функции Siri в различных странах и регионах.
Добавление напоминания из другого приложения
Напомните себе вернуться к этому приложению, например, чтобы еще раз посетить веб-сайт или место на карте, и добавьте в напоминание ссылку на то, где вы остановились. Откройте приложение, к которому необходимо вернуться, и найдите кнопку «Поделиться». Затем нажмите значок «Напоминания».
Дополнительная информация
- Узнайте, как упорядочить напоминания с помощью списков и тегов в приложении «Напоминания».
- Делитесь списками напоминаний и назначайте напоминания другим пользователям из общего списка для разделения задач.
EventKit в Xamarin.iOS
В iOS есть два встроенных приложения, связанных с календарем: приложение календаря и приложение напоминаний. Это достаточно просто, чтобы понять, как приложение календаря управляет данными календаря, но приложение напоминаний менее очевидно. Напоминания на самом деле могут содержать даты, связанные с ними с точки зрения того, когда они должны быть выполнены, и т. д. Таким образом, iOS хранит все данные календаря, будь то события календаря или напоминания, в одном расположении, которое называется база данных календаря.
Платформа EventKit предоставляет способ доступа к данным календарей, событий календаря и напоминаний , которые хранятся в базе данных календаря. Доступ к календарям и событиям календаря был доступен с iOS 4, но в iOS 6 появилась новая возможность доступа к напоминаниям.
В этом руководстве мы рассмотрим:
- Основные сведения о EventKit . Это позволит ознакомиться с основными понятиями EventKit с помощью основных классов и получить представление об их использовании. Этот раздел необходимо прочитать перед рассмотрением следующей части документа.
- Общие задачи — раздел «Общие задачи» предназначен для краткого руководства по выполнению общих задач, таких как ; перечисление календарей, создание, сохранение и получение событий календаря и напоминаний, а также использование встроенных контроллеров для создания и изменения событий календаря. Этот раздел не обязательно читать с передней части, так как он предназначен для конкретных задач.
Все задачи в этом руководстве доступны в дополнительном примере приложения:

Требования
EventKit появилась в iOS 4.0, но доступ к данным напоминаний появился в iOS 6.0. Таким образом, для общей разработки EventKit вам потребуется использовать не менее версии 4.0 и 6.0 для напоминаний.
Кроме того, приложение Напоминания недоступно в симуляторе, что означает, что данные напоминаний также будут недоступны, если вы не добавите их первым. Кроме того, запросы доступа отображаются только пользователю на фактическом устройстве. Таким образом, разработка EventKit лучше всего тестироваться на устройстве.
Основные сведения о наборе событий
При работе с EventKit важно понимать общие классы и их использование. Все эти классы можно найти в EventKit и EventKitUI (для EKEventEditController ).
EventStore
Класс EventStore является самым важным классом в EventKit, так как он требуется для выполнения любых операций в EventKit. Его можно рассматривать как постоянное хранилище или ядро СУБД для всех данных EventKit. У EventStore вас есть доступ к календарям и событиям календаря в приложении «Календарь», а также к напоминаниям в приложении Напоминания.
Поскольку EventStore ядро СУБД похоже на ядро СУБД, оно должно быть долгоживущее, то есть оно должно быть создано и уничтожено как можно меньше в течение времени существования экземпляра приложения. На самом деле, рекомендуется, чтобы после создания одного экземпляра EventStore в приложении вы сохраняли эту ссылку в течение всего времени существования приложения, если вы не уверены, что она больше не понадобится. кроме того, все вызовы должны идти к одному EventStore экземпляру. По этой причине рекомендуется использовать одноэлементный шаблон для сохранения доступности одного экземпляра.
Создание хранилища событий
В следующем коде показан эффективный способ создания одного экземпляра EventStore класса и его статического доступа из приложения:
public class App < public static App Current < get < return current; >> private static App current; public EKEventStore EventStore < get < return eventStore; >> protected EKEventStore eventStore; static App () < current = new App(); >protected App () < eventStore = new EKEventStore ( ); >>
Приведенный выше код использует шаблон Singleton для создания экземпляра при загрузке EventStore приложения. EventStore Затем можно получить глобальный доступ из приложения следующим образом:
App.Current.EventStore;
Обратите внимание, что во всех приведенных здесь примерах используется этот шаблон, поэтому они ссылаются на EventStore с помощью App.Current.EventStore .
Запрос доступа к данным календаря и напоминания
Прежде чем получить доступ к любым данным через EventStore, приложение должно сначала запросить доступ к данным событий календаря или напоминаниям в зависимости от того, какие из них вам нужны. Чтобы упростить это, EventStore предоставляет метод с именем RequestAccess , который при вызове отображает представление оповещения для пользователя о том, что приложение запрашивает доступ либо к данным календаря, либо к данным напоминания в зависимости от того, какие EKEntityType данные передаются ему. Так как он создает представление оповещений, вызов является асинхронным и вызывает обработчик завершения, передаваемый NSAction в качестве (или лямбда-выражения), который получит два параметра: логическое значение, указывающее, был ли предоставлен доступ, и NSError , который, если значение не равно NULL, будет содержать сведения об ошибке в запросе. Например, следующий код будет запрашивать доступ к данным события календаря и отображать представление оповещений, если запрос не был предоставлен.
App.Current.EventStore.RequestAccess (EKEntityType.Event, (bool granted, NSError e) => < if (granted) //do something here else new UIAlertView ( "Access Denied", "User Denied Access to Calendar Data", null, "ok", null).Show (); >);
После того как запрос будет удовлетворен, он будет запоминаться до тех пор, пока приложение установлено на устройстве, и не будет отображаться оповещение для пользователя. Однако доступ предоставляется только к типу ресурса: предоставленным событиям календаря или напоминаниям. Если приложению требуется доступ к обоим, оно должно запрашивать оба.
Так как разрешение запоминается, каждый раз выполнять запрос относительно дешево, поэтому рекомендуется всегда запрашивать доступ перед выполнением операции.
Кроме того, так как обработчик завершения вызывается в отдельном потоке (не в пользовательском интерфейсе), все обновления пользовательского интерфейса в обработчике завершения должны вызываться через InvokeOnMainThread , в противном случае будет выдано исключение, и если приложение не перехватывается, приложение завершит работу.
EKEntityType
EKEntityType — это перечисление, описывающее тип EventKit элемента или данных. Он имеет два значения: Event и Напоминание. Он используется в ряде методов, в том числе EventStore.RequestAccess для определения EventKit типа данных, к которым следует получить доступ или извлечь.
EKCalendar
EKCalendar представляет календарь, содержащий группу событий календаря. Календари могут храниться в разных местах, например локально, в iCloud, в расположении сторонних поставщиков, таких как Exchange Server или Google и т. д. EKCalendar Часто используется, чтобы определить EventKit , где искать события или где их сохранять.
EKEventEditController
EKEventEditController можно найти в EventKitUI пространстве имен и является встроенным контроллером, который можно использовать для редактирования или создания событий календаря. Как и встроенные контроллеры камеры, EKEventEditController выполняет тяжелую работу при отображении пользовательского интерфейса и обработке экономии.
EKEvent
EKEvent представляет событие календаря. И EKEvent , и EKReminder наследуют от EKCalendarItem и имеют такие поля, как Title , Notes и т. д.
EKReminder
EKReminder представляет элемент напоминания.
EKSpan
EKSpan — это перечисление, описывающее диапазон событий при изменении событий, которые могут повторяться, и имеет два значения: ThisEvent и FutureEvents. ThisEvent означает, что любые изменения будут происходить только к конкретному событию в ряде, на которое ссылается ссылка, в то время как FutureEvents это событие будет влиять на это событие и все будущие повторения.
Задания
Для простоты использования использование EventKit было разбито на распространенные задачи, описанные в следующих разделах.
Перечисление календарей
Чтобы перечислить календари, настроенные пользователем на устройстве, вызовите GetCalendars EventStore и передайте тип календарей (напоминаний или событий), которые вы хотите получить:
EKCalendar[] calendars = App.Current.EventStore.GetCalendars ( EKEntityType.Event );
Добавление или изменение события с помощью встроенного контроллера
EKEventEditViewController выполняет большую работу, если вы хотите создать или изменить событие с тем же пользовательским интерфейсом, который представлен пользователю при использовании приложения Календарь:

Чтобы использовать его, необходимо объявить его как переменную уровня класса, чтобы она не собирала мусор, если она объявлена в методе:
public class HomeController : DialogViewController
Затем, чтобы запустить его, создайте его экземпляр, присвойте ему ссылку EventStore на , подключите к нему делегат EKEventEditViewDelegate , а затем отобразите его с помощью PresentViewController :
EventKitUI.EKEventEditViewController eventController = new EventKitUI.EKEventEditViewController (); // set the controller's event store - it needs to know where/how to save the event eventController.EventStore = App.Current.EventStore; // wire up a delegate to handle events from the controller eventControllerDelegate = new CreateEventEditViewDelegate ( eventController ); eventController.EditViewDelegate = eventControllerDelegate; // show the event controller PresentViewController ( eventController, true, null );
При необходимости, если вы хотите предварительно заполнить событие, можно создать новое событие (как показано ниже) или получить сохраненное событие:
EKEvent newEvent = EKEvent.FromStore ( App.Current.EventStore ); // set the alarm for 10 minutes from now newEvent.AddAlarm ( EKAlarm.FromDate ( DateTime.Now.AddMinutes ( 10 ) ) ); // make the event start 20 minutes from now and last 30 minutes newEvent.StartDate = DateTime.Now.AddMinutes ( 20 ); newEvent.EndDate = DateTime.Now.AddMinutes ( 50 ); newEvent.Title = "Get outside and exercise!"; newEvent.Notes = "This is your reminder to go and exercise for 30 minutes.”;
Если вы хотите предварительно заполнить пользовательский интерфейс, обязательно задайте свойство Event на контроллере:
eventController.Event = newEvent;
Сведения об использовании существующего события см. в разделе Получение события по идентификатору далее.
Делегат должен переопределить Completed метод , который вызывается контроллером, когда пользователь завершает работу с диалоговым окном:
protected class CreateEventEditViewDelegate : EventKitUI.EKEventEditViewDelegate < // we need to keep a reference to the controller so we can dismiss it protected EventKitUI.EKEventEditViewController eventController; public CreateEventEditViewDelegate (EventKitUI.EKEventEditViewController eventController) < // save our controller reference this.eventController = eventController; >// completed is called when a user eith public override void Completed (EventKitUI.EKEventEditViewController controller, EKEventEditViewAction action) < eventController.DismissViewController (true, null); >> >
При необходимости в делегате можно проверка действие в Completed методе для изменения события и повторного изменения или выполнения других действий, если оно отменено, и т. д.
public override void Completed (EventKitUI.EKEventEditViewController controller, EKEventEditViewAction action) < eventController.DismissViewController (true, null); switch ( action ) < case EKEventEditViewAction.Canceled: break; case EKEventEditViewAction.Deleted: break; case EKEventEditViewAction.Saved: // if you wanted to modify the event you could do so here, // and then save: //App.Current.EventStore.SaveEvent ( controller.Event, ) break; >>
Программное создание события
Чтобы создать событие в коде, используйте метод фабрики FromStore в EKEvent классе и задайте в нем все данные:
EKEvent newEvent = EKEvent.FromStore ( App.Current.EventStore ); // set the alarm for 10 minutes from now newEvent.AddAlarm ( EKAlarm.FromDate ( DateTime.Now.AddMinutes ( 10 ) ) ); // make the event start 20 minutes from now and last 30 minutes newEvent.StartDate = DateTime.Now.AddMinutes ( 20 ); newEvent.EndDate = DateTime.Now.AddMinutes ( 50 ); newEvent.Title = "Get outside and do some exercise!"; newEvent.Notes = "This is your motivational event to go and do 30 minutes of exercise. Super important. Do this.";
Необходимо задать календарь, в который нужно сохранить событие, но если у вас нет параметров, можно использовать значение по умолчанию:
newEvent.Calendar = App.Current.EventStore.DefaultCalendarForNewEvents;
Чтобы сохранить событие, вызовите метод SaveEvent в EventStore :
NSError e; App.Current.EventStore.SaveEvent ( newEvent, EKSpan.ThisEvent, out e );
После сохранения свойство EventIdentifier будет обновлено с помощью уникального идентификатора, который можно использовать позже для получения события:
Console.WriteLine ("Event Saved, ID: " + newEvent.CalendarItemIdentifier);
EventIdentifier — это guid в строковом формате.
Создание напоминания программным способом
Создание напоминания в коде во многом аналогично созданию события календаря:
EKReminder reminder = EKReminder.Create ( App.Current.EventStore ); reminder.Title = "Do something awesome!"; reminder.Calendar = App.Current.EventStore.DefaultCalendarForNewReminders;
Чтобы сохранить, вызовите метод SaveReminder в : EventStore
NSError e; App.Current.EventStore.SaveReminder ( reminder, true, out e );
Получение события по идентификатору
Чтобы получить событие по его идентификатору, используйте метод EventFromIdentifier в EventStore и передайте ему EventIdentifier объект , извлеченный из события:
EKEvent mySavedEvent = App.Current.EventStore.EventFromIdentifier ( newEvent.EventIdentifier );
Для событий есть два других свойства идентификатора, но EventIdentifier это единственное, которое работает для этого.
Получение напоминания по идентификатору
Чтобы получить напоминание, используйте метод GetCalendarItem в EventStore и передайте ему CalendarItemIdentifier:
EKCalendarItem myReminder = App.Current.EventStore.GetCalendarItem ( reminder.CalendarItemIdentifier );
Так как GetCalendarItem возвращает EKCalendarItem , его необходимо привести к EKReminder , если необходимо получить доступ к данным напоминания или использовать экземпляр как более поздний EKReminder .
Не используйте GetCalendarItem для событий календаря, так как на момент написания статьи это не работает.
Удаление события
Чтобы удалить событие календаря, вызовите метод RemoveEvent и передайте ссылку на EventStore событие и соответствующий EKSpan :
NSError e; App.Current.EventStore.RemoveEvent ( mySavedEvent, EKSpan.ThisEvent, true, out e);
Обратите внимание, что после удаления события ссылка на событие будет иметь значение null .
Удаление напоминания
Чтобы удалить напоминание, вызовите RemoveReminder в EventStore и передайте ссылку на напоминание:
NSError e; App.Current.EventStore.RemoveReminder ( myReminder as EKReminder, true, out e);
Обратите внимание, что в приведенном выше коде имеется приведение к EKReminder , так как GetCalendarItem использовался для его извлечения.
Поиск событий
Для поиска событий календаря необходимо создать объект NSPredicate с помощью метода PredicateForEvents в EventStore . — NSPredicate это объект данных запроса, который iOS использует для поиска совпадений:
DateTime startDate = DateTime.Now.AddDays ( -7 ); DateTime endDate = DateTime.Now; // the third parameter is calendars we want to look in, to use all calendars, we pass null NSPredicate query = App.Current.EventStore.PredicateForEvents ( startDate, endDate, null );
После создания NSPredicate используйте метод EventsMatching в EventStore :
// execute the query EKCalendarItem[] events = App.Current.EventStore.EventsMatching ( query );
Обратите внимание, что запросы синхронны (блокируются) и могут занять много времени в зависимости от запроса, поэтому для этого может потребоваться запустить новый поток или задачу.
Поиск напоминаний
Поиск напоминаний аналогичен событиям; для него требуется предикат, но вызов уже является асинхронным, поэтому вам не нужно беспокоиться о блокировке потока:
// create our NSPredicate which we'll use for the query NSPredicate query = App.Current.EventStore.PredicateForReminders ( null ); // execute the query App.Current.EventStore.FetchReminders ( query, ( EKReminder[] items ) => < // do someting with the items >);
Итоги
В этом документе представлен обзор как важных элементов платформы EventKit, так и ряда наиболее распространенных задач. Однако платформа EventKit очень большая и мощная и включает в себя функции, которые не были представлены здесь, такие как пакетные обновления, настройка оповещений, настройка повторения событий, регистрация и прослушивание изменений в базе данных календаря, настройка GeoFences и многое другое. Дополнительные сведения см. в руководстве по программированию календарей и напоминаний Apple.
Связанные ссылки
- Календари (пример)
- Введение в iOS 6
- Общие сведения о календарях и напоминаниях
5 фишек календаря iPhone
Календарь iPhone — предустановленное приложение, которое знает каждый пользователь iOS. Но знаете ли вы о всех его фишках?
Как ни странно, очень много пользователей iOS игнорируют календарь iPhone как основное средство получения уведомлений о событиях. С личного опыта, я куда более привязана к сторонним сервисам и приложениям, вроде Trello, Facebook, Google Calendar и так далее. А вот Календарь в iPhone остается в стороне. У меня эта тенденция появилась из-за плохого опыта со спамом в Календаре. На самом деле, Календарь на iOS это очень мощный инструмент, который стоит вашего внимания. В этой статье я расскажу несколько прикольных фишек, что помогут вам лучше взаимодействовать с Календарем.
1. Учет времени в пути к месту события
- Открыть Календарь iOS.
- Нажать «Добавить событие».
- Перейти во «Время в пути» и добавить нужное время.

Для меня это оказалось очень полезной функцией, так как опаздывать на встречи не очень хочется, а ставить по два напоминания: когда нужно выйти из дома, чтобы точно успеть и о самом событии — не очень удобно.
2. Быстрое создание событий длинным нажатием
События в Календаре можно создавать длинным нажатием на экран, но только если мы просматриваем события недели.
- Открываем Календарь, переворачиваем экран в альбомную ориентацию.
- Затем нажимаем на «Неделя» и выбрав нужное время удерживаем палец длинным нажатием.
- Система создает событие на определенное время, нам его уже вводить не нужно.
Это удобно для быстрого создания события.

3. Добавление участников события
Создавая событие вы можете добавить его участников и разослать им приглашение присоединиться к вам в этом событии по @mail. Да, многие лучше воспользуются сообщением в социальных сетях, но в таком случае есть большой риск, что ваш приглашенный контакт забудет о встрече или событии. А с Календарем iOS он/она получит уведомление о начале.
- Откройте Календарь → Нажмите «Добавить событие».
- Создайте событие и откройте поле «Участники».
- Добавьте почты ваших участников.

Удобно использовать если планируется общий созвон и вы не хотите чтобы его участники провтыкали встречу. Один минус — они должны принять приглашение на событие.
4. Включите фиксацию часового пояса для событий
Если вы часто взаимодействуете с сотрудниками которые находятся в других часовых поясах или планируете позвонить близким в определенное время, стоит включить фиксацию по часовому поясу.
Таким образом ваши напоминания будут устанавливаться в том часовом поясе, который вы укажите. Но в то же время iPhone будет работать с настройками часового пояса по месторасположению.
- Переходим в Настройки → Календарь.
- Затем выбираем «Фиксация часового пояса».
- Активируем флажок, устанавливаем часовой пояс.

5. Создайте повторяющееся событие в календаре iPhone
Я тот человек, который постоянно забывает про обязательные платежи и их даты. К счастью в Календаре можно создать событие с повторением, которое можно продублировать на одно и то же время.
- Откройте Календарь на Mac или PC.
- Создаем новое событие → указываем «Повторить».
- Настраиваем временной промежуток, у меня это месяц.
- Также не забудьте указать, если после повторного действия вам нужно отменить уведомления.
- Можно добавить человека, который как и вы будет видеть уведомление и прикрепить ссылку, добавить сообщение к напоминанию, если это требуется.

Также это можно сделать через приложение «Напоминания» с iPhone:
- Переходите в приложение « Напоминания » на iPhone.
- Создаете новое напоминание, нажимаете «Подробнее ».
- Указываете дату, время.
- Во время указывания даты можно нажать на «Повтор ».
- Затем выбрать нужный вам промежуток времени, когда напоминание будет отображаться.

Заключение
Как видите, приложение Календарь на iOS интуитивное и простое, работа с ним может быть полезным дополнением для вас и ваших близких. Осталось только приучить себя планировать все события в Календаре. Надеюсь, что эта статья была вам полезной. Делитесь в комментариях своими фишками приложения Календарь!
