2010-08-06 15 views
23

Wie kann ich Objective-C verwenden, um programmgesteuert ein iCal-Ereignis im Standardkalender zu erstellen? Ich möchte prüfen, ob das Event bereits existiert und den Button-Status entsprechend setzen.Wie kann ich programmgesteuert ein iCal-Ereignis im Standardkalender erstellen?

+0

Was ist Ihre Frage? – RunLoop

+2

Es ist keine Frage. Es ist ein nettes Stück für Leute wie mich, die ein solides Beispiel suchen. –

+24

Können Sie die Frage * bearbeiten, um es zu einer Frage zu machen * und dann das Snippet als Antwort hinzufügen? Wenn Sie dies tun, können Sie Ihre als richtige Antwort auswählen. Es mag seltsam erscheinen, aber es ist der bevorzugte Weg, mit solchen Situationen umzugehen. – Will

Antwort

15

Ein Beispiel für die programmgesteuerte Erstellung eines iCAL-Ereignisses im Standardkalender unter Verwendung von Objective-C. Der Code prüft, ob das Ereignis bereits existiert, und setzt den Status der Schaltfläche entsprechend. Hier ist der Code von @codeburger:

-(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; 

} 

ich diese Frage ohne Antwort gesehen habe und hatte das Gefühl, es zu @codeburger volle Punktzahl geben bearbeitet werden soll.

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

EKEvent *event = [EKEvent eventWithEventStore:eventStore]; 
NSDate *date = [[NSDate alloc ]init];//today,s date 
event.title = @"remainder";//title for your remainder 

event.startDate=date;//start time of your remainder 
event.endDate = [[NSDate alloc] initWithTimeInterval:1800 sinceDate:event.startDate];//end time of your remainder 

NSTimeInterval interval = (60 *60)* -3 ; 
EKAlarm *alarm = [EKAlarm alarmWithRelativeOffset:interval]; //Create object of alarm 

[event addAlarm:alarm]; //Add alarm to your event 

[event setCalendar:[eventStore defaultCalendarForNewEvents]]; 
    NSError *err; 
    NSString *ical_event_id; 
    //save your event 
if([eventStore saveEvent:event span:EKSpanThisEvent error:&err]){ 
     ical_event_id = event.eventIdentifier; 
     NSLog(@"%@",ical_event_id); 
} 

for more info check this link 

sample for EKEvent

Verwandte Themen