Проблема программно получить EKEvent с помощью eventIdentifier - PullRequest
0 голосов
/ 01 декабря 2011

EventIdentifier, получающий при сохранении, не может получить событие, используя eventIdentifier.

Таким образом, мы не можем программно обновить EKEvent, даже если у нас есть его eventIdentifier

В [SimpleEKDemo] [1] предоставлено Apple

записать идентификатор события в метод EKEventEditViewDelegate

- (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:
// When user hit "Done" button, save the newly created event to the event store,
// and reload table view.
// If the new event is being added to the default calendar, then update its
// eventsList.
if (self.defaultCalendar ==  thisEvent.calendar) {

[self.eventsList addObject:thisEvent];
}

[controller.eventStore saveEvent:controller.event span:EKSpanThisEvent error:&error];
NSLog(@"thisEvent.id = %@", thisEvent.eventIdentifier);
[self.tableView reloadData];
break;

case EKEventEditViewActionDeleted:
// When deleting an event, remove the event from the event store,
// and reload table view.
// If deleting an event from the currenly default calendar, then update its
// eventsList.
if (self.defaultCalendar ==  thisEvent.calendar) {
[self.eventsList removeObject:thisEvent];
}
[controller.eventStore removeEvent:thisEvent span:EKSpanThisEvent error:&error];
[self.tableView reloadData];
break;

default:
break;
}
// Dismiss the modal view controller
[controller dismissModalViewControllerAnimated:YES];

}

Запустите приложение на устройстве, мы получим eventIDentifier как:

eventidonsave = 3CB60848-6CCA-43BF-B2C6-9EB9F5CFBBB7: C6CDE9DAA864420BA9A2E02CD886369700000000000000000000000000000000

Получить событие, используя идентификатор события при следующем запуске

EKEventStore *eventStore1 = [[EKEventStore alloc] init];

EKEvent *event1  = [eventStore1 eventWithIdentifier: eventidonsave ];
if(event1){
      NSLog(@"event1 id = %@", event1.eventIdentifier);
}else{
      NSLog(@"Not Found");
}

Мы получим «Не найдено».

зарегистрировать идентификаторы событий вместо извлечения событий и снова запустить приложение

- (NSArray *)fetchEventsForToday {
    ....
    ....



    for(EKEvent *eachEvent in events){

        NSLog(@"eachEvent.id = %@", eachEvent.eventIdentifier);
    }
}

мы видим, что получаем другой идентификатор события, такой как 3CB60848-6CCA-43BF-B2C6-9EB9F5CFBBB7: 040000008200E00074C5B7101A82E00800000000646C6F747573C3010000000000000000007800600FFFB0000000000000000000000000000000000000000000000000000000000000000000000000000

это не то же самое, что 'eventidonsave'

Привет всем, спасибо за чтение. Это было решено. Приведенный выше код (не отредактированный) работает нормально. Я предполагаю, что проблема была, Eventid был зарегистрирован перед этой строкой "[controller.eventStore saveEvent: .."

НЕТ, только что перешел на после сохранения. и, кажется, все в порядке.

1 Ответ

1 голос
/ 26 июня 2013

Вам необходимо сначала сохранить EKEvent, а затем получить его идентификатор.Это даст нулевое значение, пока вы не сохраните событие.[self.eventStore saveEvent:event span: EKSpanFutureEvents error:&error];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...