2013-05-21 6 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

먼저 앱 according to Apple의 수명 동안 EventStore의 단일 인스턴스를 사용해야합니다.

따라서 나는 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. 
}