Если вы используете iOS 6, попробуйте calendarItemExternalIdentifier.
Этот идентификатор позволяет получить доступ к одному и тому же событию или напоминанию на нескольких устройствах.
У меня была эта проблема с использованием основных данных, iCloud и календарей. Я захватил eventIdentifier и сохранил его в основных данных на одном устройстве, НО, когда я проверял другое устройство, в календаре изменился eventIdentifier.
Решил это, захватив calendarItemExternalIdentifier вместо eventIdentifier:
Справочник по iOS
Захват календаряItemExternalIdentifier при сохранении события:
- (void)eventEditViewController:(EKEventEditViewController *)controller
didCompleteWithAction:(EKEventEditViewAction)action {
NSError *error = nil;
EKEvent *thisEvent = controller.event;
switch (action) {
case EKEventEditViewActionCanceled:
// Edit action canceled, do nothing.
break;
case EKEventEditViewActionSaved:
{[self.selectedClientSession setEventIdentifier:[thisEvent calendarItemExternalIdentifier]];
.......
При отображении события в приложении запросите, является ли событие одним из наших «сеансовых» событий:
// Get the event e.g. from a tableview listing of events today
calendarEvent = (EKEvent*)[eventsList2 objectAtIndex:indexPath.row];
// Is this one of our session events? Build a predicate to query our clientSession objects by comparing the identifier we captured with the Event calendarItemExternalIdentifier
self.sessionPredicate = [NSPredicate predicateWithFormat:@" eventIdentifier = %@ ",[calendarEvent calendarItemExternalIdentifier]
// Get the results
[self setupFetchedResultsController];
//Check that calendarItemExternalIdentifier has been recorded in our session database
NSArray *sessionSet = [self.fetchedResultsController fetchedObjects];
//If no results then this is not a client session
if (sessionSet.count == 0){
// Just a regular event to display
} else{
//It is a client session - display and allow to do interesting stuff
}