Доступ к программно созданному календарю на устройстве iOS - PullRequest
2 голосов
/ 29 марта 2012

Я выяснил, как добавить собственный календарь в приложение для iPhone, но не могу понять, как добавить этот календарь в календарь устройства. Событие показывает правильный календарь при просмотре из приложения, но даже когда я нажимаю на строку календаря для события, моего календаря нет в списке, и мне нужно отменить, если я хочу сохранить правильное название календаря. Есть ли способ «подписаться» на мой локально созданный календарь, чтобы я мог видеть его из приложения «Календарь» на устройстве (очевидно, я бы также хотел, чтобы он синхронизировался с компьютером пользователя и т. Д.).

Ответы [ 2 ]

6 голосов
/ 30 марта 2012

Это связано с iCloud. Когда iCloud включен, календарь с локальным источником (EKSourceTypeLocal) будет скрыт.

1 голос
/ 03 июня 2012

Я боролся с этим сегодня, и все сводится к тому, какие настройки Календаря я (и в конечном итоге конечный пользователь) имеет на устройстве.

Лично я синхронизирую свои GMail Календари в формате Exchange -это предотвращает отображение «локальных» календарей.

При манипулировании EKSource, зависящим от настроек пользователя, должен корректно отображаться ваш календарь - это работает для моего сценария Exchange, см. ссылку на класс EKSource для получения дополнительной информации.Попробуйте проверить iCloud!

EKCalendar *calendar = [EKCalendar calendarWithEventStore:self.eventStore];
calendar.title = @"My Calendar";

EKSource *localSource = nil;
EKSource *defaultSource = [self.eventStore defaultCalendarForNewEvents].source;

if (defaultSource.sourceType == EKSourceTypeExchange) {
    localSource = defaultSource;
} else {

    for (EKSource *source in self.eventStore.sources) {
        if (source.sourceType == EKSourceTypeLocal) {
            localSource = source;
            break;
        }
    }

}

if (localSource) {
    calendar.source = localSource;
} else {
    NSLog(@"Error: no local sources available");
}

NSError *error = nil;
BOOL result = [self.eventStore saveCalendar:calendar commit:YES error:&error];

if (result) {

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
    [userDefaults setObject:calendar.calendarIdentifier forKey:@"Calendar"];
    [userDefaults synchronize];

    NSLog(@"Saved calendar to event store");

} else {
    NSLog(@"Error saving Calendar");
}
...