Управляйте событиями календаря iPhone из нашего приложения

Ниже приведен мой код

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

В этом коде у меня есть идентификатор события моего календаря.

  1. Теперь я хочу обновить событие с изменениями, однако оно не обновляет ранее созданное событие.

  2. Во-вторых, мне нужно знать, возможно ли зафиксировать изменения в событии календаря, которые они сделали в календаре iPhone, включая удаление события.

  3. Можем ли мы удалить событие календаря, используя eventid?

Пожалуйста, помогите мне, если кто-нибудь знает ответ. Заранее спасибо.

С уважением, Дилип Раджкумар


person Dilip Rajkumar    schedule 12.07.2011    source источник


Ответы (1)


Событие может быть создано следующим образом:

[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.
person AppAspect    schedule 12.07.2011
comment
Это действительно хорошая идея Большое спасибо за вашу помощь. У меня есть еще одно сомнение: 1. Могу ли я получить события, созданные нашим приложением, и 2. Если пользователь редактирует событие, созданное нашим приложением, с помощью календаря iPhone, можем ли мы получить измененное событие, когда мы открываем наш приложение. заранее спасибо - person Dilip Rajkumar; 14.07.2011
comment
Здравствуйте, мы можем сделать здесь одну вещь, чтобы управлять созданием события. У вас может быть одна база данных или plist для событий, которые позаботятся обо всех событиях, созданных вашим приложением. А по остальным пунктам я проверю и сообщу вам в ближайшее время. - person AppAspect; 14.07.2011
comment
Да, это работает, однако я работаю над другой задачей, продолжу задачу, возможно, на следующей неделе, только тогда я столкнусь с большей проблемой, спасибо за ваш ответ. Я дам вам знать, как только закончу. Еще раз, спасибо. - person Dilip Rajkumar; 03.08.2011
comment
AppAspect.. Я снова начал работать над этой проблемой. Теперь я могу делать все, что у меня есть, единственная проблема, с которой я столкнулся, - это метод EKEventEditViewActionDeleted в eventEditViewController, который вызывается трижды, когда я удаляю событие. Пожалуйста, помогите мне .. Спасибо заранее - person Dilip Rajkumar; 10.08.2011