EKEventKit - Как получить eventIdentifier после пакетной фиксации?

Я делаю пакетный коммит после сохранения большого количества eKEvents. И мне нужно получить eventIdentifier для каждого EKEvent. Но это не показывает после коммита. Я знаю, что сохранение его с

commit:NO 

не будет производить eventIdentifier. Но, конечно же, после выдачи коммита, eventIdentifier должен быть заполнен.

По сути, мое приложение должно получить набор данных календарного события из веб-службы и сохранить их на устройстве. К сожалению, количество выбрасываемых данных может доходить до 1000 событий.

Сначала я использовал это:

[self.ekEventStore saveEvent:ekEvent span:EKSpanFutureEvents commit:YES error:&error];

Но объем данных, сбрасываемых на устройство, вызывает сбой EKEventStore при случайном перезапуске устройства.

В конце концов я понял, что это как-то связано с количеством коммитов, которые я добавляю в EventStore, и решил установить коммит на NO

[self.ekEventStore saveEvent:ekEvent span:EKSpanFutureEvents commit:NO error:&error];

И в конце цикла вызовите это:

[self.ekEventStore commit:&error];

Но тогда проблема eventIdentifier обнаруживается. Даже после выполнения коммита в конце цикла каждое событие дало мне нулевое значение для eventIdentifier. Этого никогда не случалось, когда я совершал коммит каждый раз, когда я сохранял в EventStore. Я делаю что-то неправильно? Я подумал, что после фиксации события будут регистрировать eventIdentifier для каждого экземпляра. Но это не так.

Также проблема, кажется, распространена для этого парня здесь.

Спасибо

1 ответ

Решение

Я наконец смог разобраться в проблеме.

По сути, мне нужно было сделать все внутри:

- (void)requestAccessToEntityType:(EKEntityType)entityType
                   completion:(EKEventStoreRequestAccessCompletionHandler)completion

метод.

Когда я сказал все, я имею в виду, когда вы делаете выборку, сохраняете, редактируете, редактируете и даже отправляете сообщения в EventStore, делайте это внутри блока завершения. При условии, что возвращаемое значение предоставленного блока завершения установлено в YES.

Чтобы дать контекст. То, что я делал с методом requestAccess, было просто запросом доступа и действовал в соответствии с тем, что получено, независимо от того, предоставлено оно или нет. Затем я делаю свои вещи вне метода.

Это сработало для меня. Если есть люди, у которых есть другое решение. Пожалуйста, напишите это здесь, ради меня и для всех, кто еще не решил эту проблему. Благодарю.

Другие вопросы по тегам