2010-08-06 69 views
23

如何使用Objective-C以編程方式在默認日曆中創建iCal事件?我想檢查事件是否已經存在,並相應地設置按鈕狀態。如何以編程方式在默認日曆中創建iCal事件?

+0

什麼是你的問題? – RunLoop 2010-08-06 13:03:27

+2

它不是一個問題。對於像我這樣尋找堅實範例的人來說,它是一個很好的片段。 – 2011-06-19 14:43:05

+24

你可以編輯問題*使其成爲一個問題*然後添加片段作爲答案?如果你這樣做,你可以選擇你的正確答案。這看起來很奇怪,但它是處理這種情況的首選方式。 – Will 2011-07-19 11:59:01

回答

15

如何以編程方式在默認日曆中使用Objective-C創建iCAL事件的示例。代碼檢查事件是否已經存在,並相應地設置按鈕狀態。下面是代碼由@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; 

} 

我已經看到了這個問題沒有答案,感覺就像它應該被編輯充分肯定了@codeburger

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

相關問題