2013-05-21 3 views
1

Добрый день! Я использую функцию «Сохранить событие в календаре» через UIActivityItems. В этой функции я создаю новый календарь и добавляю событие в этот календарь:Проверить EKCalendar

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

// Get the calendar source 
EKSource* localSource; 
for (EKSource* source in eventStore.sources) { 
    if (source.sourceType == EKSourceTypeLocal) 
    { 
     localSource = source; 
     break; 
    } 
} 

if (!localSource) 
    return; 

EKCalendar *newCalendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:eventStore]; 
calendar.source = localSource; 
calendar.title = @"New Calendar"; 

NSError *errorCalendar; 
[eventStore saveCalendar:newCalendar commit:YES error:&errorCalendar]; 

EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
event.title  = @"Title"; 

event.startDate = startDate; 
event.endDate = endDate; 

[event setCalendar:newCalendar]; 
// and etc. 

И его работа. Но каждый раз он снова создает новый календарь с именем «Новый календарь». Как проверить, существует ли календарь с таким именем? И как я могу изменить тип календаря? В день рождения или т. Д.

ответ

3

Во-первых, вам нужно использовать один экземпляр EventStore на весь срок службы вашего приложения, according to Apple.

Поэтому я предлагаю сделать на eventStore это свойство вашего контроллера вида:

@property (nonatomic, retain) EKEventStore *eventStore;

и в вашем viewDidLoad:

self.eventStore = [[EKEventStore alloc] init];

Теперь вы можете проверить тот же eventStore экземпляр, который вы читать и писать до того, как вы что-либо сделаете:

-(BOOL)checkForCalendar { 
    //get an array of the user's calendar using your instance of the eventStore 
    NSArray *calendarArray = [self.eventStore calendarsForEntityType:EKEntityTypeEvent]; 

    // The name of the calendar to check for. You can also save the calendarIdentifier and check for that if you want 
    NSString *calNameToCheckFor = @"New Calendar"; 

    EKCalendar *cal; 

    for (int x = 0; x < [calendarArray count]; x++) { 

     cal = [calendarArray objectAtIndex:x]; 
     NSString *calTitle = [cal title]; 

     // if the calendar is found, return YES 
     if (([calTitle isEqualToString:calNameToCheckFor]) { 

      return YES; 
     } 
    } 

    // Calendar name was not found, return NO; 
    return NO; 
} 

-(void)saveNewEvent { 

    // If the calendar does not already exist, create it before you save the event. 
    if ([self checkForCalendar] == NO) { 

     // Get the calendar source 
     EKSource* localSource; 
     for (EKSource* source in eventStore.sources) { 
      if (source.sourceType == EKSourceTypeLocal) 
      { 
       localSource = source; 
       break; 
      } 
     } 

     if (!localSource) 
      return; 

     EKCalendar *newCalendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:eventStore]; 
     calendar.source = localSource; 
     calendar.title = @"New Calendar"; 

     NSError *errorCalendar; 
     [eventStore saveCalendar:newCalendar commit:YES error:&errorCalendar]; 

    } 
     EKEvent *event = [EKEvent eventWithEventStore:self.eventStore]; 
     event.title  = @"Title"; 
     event.startDate = startDate; 
     event.endDate = endDate; 
     [event setCalendar:newCalendar]; 
     // and etc. 
} 
Смежные вопросы