如何以编程方式在iPhone上创建将同步到iCal的新日历

时间:2010-08-02 02:41:39

标签: iphone xcode calendar

我正在寻找一种以编程方式在iphone设备上创建新日历的方法。我一直在关注Event Kit,它清楚地说明了如何在日历中创建一个新事件,还有一种方便的方式来收集代码中的所有日历,我找不到的是如何创建一个新的日历。保存到设备。

任何想法'

2 个答案:

答案 0 :(得分:3)

我发现这个链接可能对您有用:

how do I create a new EKCalendar on iOS device?

希望它可以帮到你!

答案 1 :(得分:0)

选中此kal repository以创建与iCal

相同的iphone日历

选中此方法以编程方式创建事件:

-(void)initCalendar {

 // An array of 1 dictionary object, containing START and END values.
 NSMutableArray* pvDict  = [[NSMutableArray alloc] initWithContentsOfURL:[NSURL    URLWithString:PV_URL ]];

 // Check if the private view event already exists in the default calendar.
 // Then set the calendar button state.

 // Get a entry point to the Calendar database.
 self.store = [[EKEventStore alloc ] init ];

 // Get an array of all the calendars.
 NSArray *calendars = store.calendars;

 // Get the default calendar, set by the user in preferences.
 EKCalendar *defaultCal = store.defaultCalendarForNewEvents;

 // Find out if this calendar is modifiable.
 BOOL isDefaultCalModifiable = defaultCal.allowsContentModifications ;

 // Create an event in the default calendar.

 self.event = [ EKEvent eventWithEventStore:store ];

 self.event.title = CHELSEA_SPACE ;
 self.event.location = CHELSEA_ADDRESS ;

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
 [dateFormatter setDateFormat:@"yyy-MM-dd HH:mm:ss.S"];

 NSString *startString = [[ pvDict objectAtIndex:0] objectForKey:@"starts" ];
 NSDate *dateStart = [dateFormatter dateFromString:startString];

 NSString *endString = [[ pvDict objectAtIndex:0] objectForKey:@"ends" ];
 NSDate *dateEnd = [dateFormatter dateFromString:endString];

 self.event.startDate = dateStart;
 self.event.endDate   = dateEnd; 

 self.event.calendar = defaultCal ;

 // Alternative code to add 2.5 hours to start time.
 // [[NSDate alloc] initWithTimeInterval:9000 sinceDate:event.startDate];

 // Search for events which match this date/time start and end.
 // Compare the matched events by event TITLE.

 NSPredicate *predicate = [store predicateForEventsWithStartDate:event.startDate 
       endDate:event.endDate calendars:calendars];

 NSArray *matchingEvents = [store eventsMatchingPredicate:predicate];

 self.calendarButton.enabled = NO;

 if( ! isDefaultCalModifiable ) {
 // The default calendar is not modifiable
 return ;
} 

 if ( [ matchingEvents count ] > 0 ) {

  // There are already event(s) which match this date/time start and end.
  // Check if this event is the PV

  EKEvent *anEvent;  
  int j;

   for ( j=0; j < [ matchingEvents count]; j++) {

   anEvent = [ matchingEvents objectAtIndex:j ] ;
   if([ CHELSEA_SPACE isEqualToString: anEvent.title ]) {
    // PV event already exists in calendar.
    return;
   }
  }
  [ anEvent release ];
 }

 self.calendarButton.enabled = YES;

 [ pvDict release ];
}

-(void)addEventToCalendar:(id)sender {

NSError *error;
BOOL saved = [self.store saveEvent:self.event span:EKSpanThisEvent error:&error]; 

NSLog(@"Saved calendar event = %@\n", (saved ? @"YES" : @"NO"));
self.calendarButton.enabled = NO;

}