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