我循环遍历大约100个对象,这些对象使用EventKit为每个对象创建一个事件。我不承诺"直到保存所有对象并知道为每个对象成功获取了calendarIdentifier。然而,大约10-15%的事件从未在设备日历或在线上显示。这仅适用于Google日历。 iCloud和当地的工作很好。
我理解在创建这样的多个事件时,最好使用:
[eventStore saveEvent:event span:EKSpanThisEvent commit:NO error:&error];
...和
[eventStore commit:&error];
...在创建所有事件之后。我也试过通过每个循环,并且可预测地在通信被中断时出错。感谢任何帮助。
答案 0 :(得分:0)
我遇到了类似的问题。我删除EKEvent实例时会出现问题,然后立即保存新的EKEvent实例。有时(可能是5分中的3分),删除的事件再次出现。删除没有返回任何错误。对我来说,看起来它没有成功提交,然后EKEventStore自行回滚“应该删除”事件。我尝试了所有不同的方法来处理处理,例如,将提交设置为“是”或“否”,再次请求访问权限,仅授予访问权限,然后启动该流程。但没有区别。我花了几个晚上试图找出导致这种情况的原因,但却没有任何线索。
然后我将删除的EKEvent的eventIdentifier添加到一个数组并第二次验证(就在我获取事件之前)。如果它仍然存在,请再次删除它。到目前为止它运作良好。这是一个肮脏的解决方案,但至少它是有效的。
所以我建议其他用户在使用EventKit使用Google Calendars进行批量操作时尝试使用类似的解决方案。在下次提取之前再次检查eventIdentifiers。如果某些eventIdentifiers应该或不应该存在(使用[EKEventStore eventWithIdentifier]),请再次添加或再次删除。
只需2美分。