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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6664399/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-14 21:27:57  来源:igfitidea点击:

Manage iPhone Calendar event from our application

iphonexcodecalendareventkit

提问by Dilip Rajkumar

The following is my code

以下是我的代码

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

In this code I have the Event id of my calendar event.

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

  1. Now I want to update the event with the changes however Its not updating the previously created event.

  2. Second I Need to know is it possible to capture the changes in calendar event they made in iPhone Calendar including deleting an event.

  3. Can we delete the calendar event using the eventid?

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

  2. 其次,我需要知道是否可以捕获他们在 iPhone 日历中所做的日历事件的更改,包括删除事件。

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

Please help me if any one know the answer.. Thank you in advance.

如果有人知道答案,请帮助我.. 在此先感谢您。

Regards, Dilip Rajkumar

问候, 迪利普·拉杰库马尔

回答by AppAspect

Event can be created by this:

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

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

You can delete the event using this:

您可以使用以下方法删除事件:

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.