Невозможно создать локальный календарь на iOS

Я пытаюсь создать локальный календарь на iOS. Я запрашиваю доступ к EKEntityTypeEvent и предоставляю его, создаю календарь из EKEventStore (да, тот же экземпляр, с которого я запрашивал доступ), найдите EKSourceTypeLocal установите его в новом календаре. Вызов saveCalendar:commit:error (with commit:YES ) возвращает YES и нет NSError . Полученный календарь имеет назначенный calendarIdentifier .

Но тогда, когда я перехожу на приложение iOS Calendar, моего календаря нет! Я пробовал симуляторы iOS 7 и 8 (после «Сбросить содержимое и настройки …», поэтому iCloud не настроен) и на iCloud-подключенном iPhone 5 с iOS 8. Ничего не работает!

Что я пропустил?

Для иллюстрации проблемы я создал голый проект со следующим контроллером представлений:

 @import EventKit; #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *resultLabel; @property (nonatomic, assign) NSUInteger calendarCount; @property (nonatomic, strong) EKEventStore *eventStore; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.resultLabel.text = @""; self.eventStore = [[EKEventStore alloc] init]; } - (IBAction)userDidTapCreateCalendar:(id)sender { EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent]; if (status == EKAuthorizationStatusNotDetermined) { __weak typeof(self) weakSelf = self; [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if (granted) { [weakSelf createCalendar]; } else { weakSelf.resultLabel.text = @"If you don't grant me access, I've got no hope!"; } }]; } else if (status == EKAuthorizationStatusAuthorized) { [self createCalendar]; } else { self.resultLabel.text = @"Access denied previously, go fix it in Settings."; } } - (void)createCalendar { EKCalendar *calendar = [EKCalendar calendarForEntityType:EKEntityMaskEvent eventStore:self.eventStore]; calendar.title = [NSString stringWithFormat:@"Calendar %0lu", (unsigned long)++self.calendarCount]; [self.eventStore.sources enumerateObjectsUsingBlock:^(EKSource *source, NSUInteger idx, BOOL *stop) { if (source.sourceType == EKSourceTypeLocal) { calendar.source = source; *stop = YES; } }]; NSError *error = nil; BOOL success = [self.eventStore saveCalendar:calendar commit:YES error:&error]; if (success && error == nil) { self.resultLabel.text = [NSString stringWithFormat:@"Created \"Calendar %0lu\" with id %@", (unsigned long)self.calendarCount, calendar.calendarIdentifier]; } else { self.resultLabel.text = [NSString stringWithFormat:@"Error: %@", error]; } } @end 

Я проверил этот код на устройстве, и он работает нормально (измените EKEntityMaskEvent -> EKEntityTypeEvent ). Я вижу новый календарь в календаре iOS. Похоже, что симулятор фактически не сохраняет ваши календари. Некоторое время назад у меня такая же проблема.

  • iOS. Невозможно добавить событие календаря в календарь Gmail с помощью EventKit.
  • Настройка календарных событий / предупреждений в iOS EventKit?
  • Запуск приложения из стандартного календаря
  • Как определить, что EKCalendar - это календарь Facebook?
  • Добавление участника в событие в iOS
  • Настройка переопределения часового пояса iPhone приложения. Могу я прочитать его?
  • Свойство 'delegate' не найдено на объекте 'AddEventViewController'
  • Как программно получать доступ к времени предупреждения по умолчанию для событий календаря?
  • Ошибка приложения iOS: я прикрутил где-то расчет даты
  • Обнаружение, если EKStore позволяет создавать календари
  • Правильно подклассифицировать класс EKEvent
  • Давайте будем гением компьютера.