EKEventKit - Как получить идентификатор события после пакетной фиксации?

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

commit:NO 

не будет создавать идентификатор события. Но обязательно после выдачи фиксации 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. Это никогда не случалось, когда я совершал каждый раз, когда сохранял в хранилище событий. Я делаю что-то неправильно? Я полагал, что после фиксации события будут регистрировать eventIdentifier для каждого экземпляра. Но это не так.

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

Спасибо


person Community    schedule 23.10.2015    source источник


Ответы (1)


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

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

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

метод.

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

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

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

person Community    schedule 10.12.2015