EKEventKit - 如何在批量提交后检索 eventIdentifier?

EKEventKit - How to retrieve eventIdentifier after batch commit?

我在保存大量 ekEvents 后进行批量提交。我需要为每个 EKEvent 检索 eventIdentifier。但它在提交后没有显示。我知道用

保存它
commit:NO 

不会产生 eventIdentifier。但肯定在发出提交后应该填写 eventIdentifier。

基本上我的应用程序必须从 Web 服务检索一堆日历事件数据并将其保存在设备上。不幸的是,抛出的数据量最多可达 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 的 nil 值。当我每次保存在 eventStore 上时,这从未发生过。难道我做错了什么?我认为在提交之后,事件会为每个实例注册 eventIdentifier。但事实并非如此。

这个问题似乎也普遍存在于 here 这个家伙身上。

谢谢

我终于弄清楚了这个问题。

基本上我需要做的就是在以下内容中做所有事情:

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

方法。

当我说一切时,我的意思是,当您执行提取、保存、编辑、编辑甚至提交到 EventStore 时,请在完成块内执行。前提是完成块的return值,granted设置为YES。

提供上下文。我对 requestAccess 方法所做的只是请求访问并根据给出的结果采取相应的行动,无论是否授予。然后我在方法之外做我的事情。

它对我有用。如果有人有不同的解决方案。请 post 在这里,为了我和其他任何尚未解决此问题的人。谢谢