Как мне создать новый EKCalendar на устройстве iOS? - PullRequest
14 голосов
/ 24 ноября 2011

У меня есть приложение, в котором я хочу запланировать некоторые события.Поэтому я хочу создать новый календарь для моего приложения, если он еще не существует и если он действительно ссылается на него при добавлении новых событий.

1 Ответ

27 голосов
/ 24 ноября 2011

Вот как это делается на iOS 5 с использованием EventKit framework:

Прежде всего вам нужен объект EKEventStore для доступа ко всему:

EKEventStore *store = [[EKEventStore alloc] init];

Теперь вам нужно найти источник локального календаря, если вы хотите, чтобы календарь сохранялся локально. Есть также источники для обменных счетов, CALDAV, MobileMe и т. Д.

// find local source
EKSource *localSource = nil;
for (EKSource *source in store.sources)
    if (source.sourceType == EKSourceTypeLocal)
    {
        localSource = source;
        break;
    }

Теперь вот часть, где вы можете получить ранее созданный календарь. Когда календарь создан (см. Ниже), есть идентификатор. Этот идентификатор должен быть сохранен после создания календаря, чтобы ваше приложение могло идентифицировать календарь снова. В этом примере я просто сохранил идентификатор в константе:

NSString *identifier = @"E187D61E-D5B1-4A92-ADE0-6FC2B3AF424F";

Теперь, если у вас еще нет идентификатора, вам нужно создать календарь:

EKCalendar *cal;
if (identifier == nil)
{
    cal = [EKCalendar calendarWithEventStore:store];
    cal.title = @"Demo calendar";
    cal.source = localSource;
    [store saveCalendar:cal commit:YES error:nil];
    NSLog(@"cal id = %@", cal.calendarIdentifier);
}

Вы также можете настроить свойства, такие как цвет календаря и т. Д. Важной частью является сохранение идентификатора для последующего использования. С другой стороны, если у вас уже есть идентификатор, вы можете просто загрузить календарь:

else
{
    cal = [store calendarWithIdentifier:identifier];
}

Я также добавил некоторые отладочные данные:

NSLog(@"%@", cal);

Теперь у вас в любом случае есть EKCalendar объект для дальнейшего использования.

РЕДАКТИРОВАТЬ: Начиная с iOS 6 calendarWithEventStore устарела, используйте:

cal = [EKCalendar calendarForEntityType:<#(EKEntityType)#> eventStore:<#(EKEventStore *)#>];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...