从我们的应用程序管理iPhone日历事件

时间:2011-07-12 12:49:21

标签: iphone xcode calendar eventkit

以下是我的代码

NSLog(@"%@", thisEvent1.title); 

EKEvent *thisEvent  = [EKEvent eventWithEventStore:eventStore];

eventStore = [[EKEventStore alloc] init];

thisEvent = [EKEvent eventWithEventStore:eventStore];


NSDateFormatter *   dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd:HH:mm"];


NSDate * date = [[NSDate alloc] init];
date = [dateFormatter dateFromString:[itsStartDate objectAtIndex:indexPath.row]];
[date retain];

thisEvent.startDate = [dateFormatter dateFromString:[itsStartDate objectAtIndex:indexPath.row]];
thisEvent.endDate = [dateFormatter dateFromString:[itsEndDate objectAtIndex:indexPath.row]];
thisEvent.notes = [itsNotes objectAtIndex:indexPath.row];
thisEvent.title = [itsTitle objectAtIndex:indexPath.row];
thisEvent.location = [itsLocation objectAtIndex:indexPath.row];
// thisEvent.allDay = TRUE;
NSMutableArray *myAlarmsArray = [[NSMutableArray alloc] init];

EKAlarm *alarm1 = [EKAlarm alarmWithRelativeOffset:-[[itsAlertOne objectAtIndex:indexPath.row] intValue]]; // 1 Hour
// EKAlarm *alarm2 = [EKAlarm alarmWithRelativeOffset:-86400]; // 1 Day

[myAlarmsArray addObject:alarm1];
//[myAlarmsArray addObject:alarm2];

thisEvent.alarms = myAlarmsArray;
[myAlarmsArray release];

//setting the Reuccurence rule

NSString * test1 = [itsRecurrenceFrequency objectAtIndex:indexPath.row];

    BOOL isRecurrenceFrequencyExists = TRUE;

EKRecurrenceFrequency  recurrenceFrequency;

if ([test1 isEqualToString: @"EKRecurrenceFrequencyDaily"]) {
    recurrenceFrequency = EKRecurrenceFrequencyDaily;
}else if([test1 isEqualToString: @"EKRecurrenceFrequencyWeekly"]){
    recurrenceFrequency = EKRecurrenceFrequencyWeekly;
}else if([test1 isEqualToString: @"EKRecurrenceFrequencyMonthly"]){
    recurrenceFrequency = EKRecurrenceFrequencyMonthly;
}else if([test1 isEqualToString: @"EKRecurrenceFrequencyYearly"]){
    recurrenceFrequency = EKRecurrenceFrequencyYearly;
}else{
    isRecurrenceFrequencyExists = FALSE;
}

    if(isRecurrenceFrequencyExists){
        EKRecurrenceRule * recurrenceRule = [[EKRecurrenceRule alloc] 

                                     initRecurrenceWithFrequency:recurrenceFrequency
                                     interval:[[itsRecurrenceInterval objectAtIndex:indexPath.row]intValue]
                                     end:nil];
        if (thisEvent.endDate != nil) {
            EKRecurrenceEnd * end = [EKRecurrenceEnd recurrenceEndWithEndDate:thisEvent.endDate];
            recurrenceRule.recurrenceEnd = end;
        }else {
            thisEvent.endDate = thisEvent.startDate;
        }

        thisEvent.recurrenceRule = recurrenceRule;
        [recurrenceRule release];

    }
[thisEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;


[eventStore saveEvent:thisEvent span:EKSpanFutureEvents error:&err]; 
NSLog(@"%@", thisEvent.eventIdentifier);
[self.eventsList addObject:thisEvent];

在此代码中,我有我的日历事件的事件ID。

  1. 现在我想用更改来更新事件但是它没有更新以前创建的事件。

  2. 第二我需要知道是否可以捕捉他们在iPhone日历中所做的日历事件的变化,包括删除事件。

  3. 我们可以使用eventid删除日历事件吗?

  4. 如果有人知道答案,请帮助我..提前谢谢你。

    此致 Dilip Rajkumar

1 个答案:

答案 0 :(得分:5)

可以通过以下方式创建事件:

[eventStore saveEvent:event span:EKSpanThisEvent error:&err]; 
   NSString* str = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier];
[arrayofCalIDs addObject:str];

您可以使用以下命令删除事件:

EKEventStore* store = [[[EKEventStore alloc] init] autorelease];
   EKEvent* event2 = [store eventWithIdentifier:[arrayofCalIDs objectAtIndex:i]];
if (event2 != nil) {  
  NSError* error = nil;
  [store removeEvent:event2 span:EKSpanThisEvent error:&error];
} 
[myPath release];

For Updating Event you cannot directly access any method as it is not available in iOS. So, you can do one thing for this. 
(1) First remove the event with eventID.
(2) Create new Event using the same information of the last deleted event.