Вот как это делается на 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 *)#>];