如何在批处理提交后检索事件标识符



我正在做批量提交后保存了很多的ekEvents。我需要检索每个EKEvent的evententiidentifier。但是在提交之后没有显示。我知道用

保存它
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。但它不是。

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

谢谢

我终于找到了问题所在。

基本上我需要做的就是在:

里面做所有的事情
- (void)requestAccessToEntityType:(EKEntityType)entityType
                   completion:(EKEventStoreRequestAccessCompletionHandler)completion

方法。

当我说一切,我的意思是当你做取回,保存,编辑,编辑甚至提交到EventStore,在完成块中做。如果完成块的返回值,授予设置为YES。

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

它对我有效。如果有人有不同的解决方案。请把它贴在这里,为了我,也为了那些还没有解决这个问题的人。谢谢。

最新更新