EKEvent的eventIdentifier和calendarItemExternalIdentifier之间的区别

时间:2014-04-28 06:07:18

标签: ios objective-c eventkit ekevent ekeventstore

阅读Apple的文档,我仍然对EKCalenderItem's calendarItemExternalIdentifierEKEvent's eventIdentifier之间的差异感到困惑,我们应该使用哪一个来识别不同的日历事件设备。具体做法是:

  

EKCalendarItem calendarItemExternalIdentifier   日历项目的外部标识符由日历服务器提供。 (只读)

  

EKEvent eventIdentifier:该事件的唯一标识符。 (只读)

在iOS6中添加了EKCalendarItem calendarItemExternalIdentifier,我认为这将是我需要保存的标识符,以便稍后在EKEventStore eventWithIdenfier:中调用,因为它声称:

  

此标识符允许您跨越访问相同的事件或提醒   多个设备。

但是在我自己的测试中,似乎当我创建并保存新的EKEvent时,我从EKEvent对象获取的eventIdenifier是唯一且有用的,而我得到的calendarItemExternalIdentifier似乎不适用于{{1} }

如果有人有确凿的答案,我很想知道。

2 个答案:

答案 0 :(得分:8)

calendarItemExternalIdentifier 是事件的RFC 5545全局唯一标识符。它不是特定于EKEventStore,实际上它代表跨设备的事件(以及非iOS客户端)。如果您要从收件箱中打开.ics附件,此值将显示在邀请的 UID 字段中。

也就是说,您无法直接根据此标识符查找EKEventStore事件。相反,您需要在事件存储上执行谓词搜索,并检查每个事件的 calendarItemExternalIdentifier

答案 1 :(得分:3)

可以使用

查找

calendarItemExternalIdentifier

func calendarItemsWithExternalIdentifier(externalIdentifier: String) -> [EKCalendarItem]

尽管iOS 6.0标有可用性, 直到最近它才可能没有记录(甚至是私人api)。 有趣的是,你可以得到多个物品, 所以应该可以得到重复事件的所有出现 (尚未测试)

calendarItemExternalIdentifier 的文档似乎也在更新, 只是为了完整起见,这里是:

  

此标识符允许您跨多个设备访问相同的事件或提醒。    在某些情况下,日历项的重复副本可以存在于同一数据库中:

     

日历项目已从ICS文件导入多个日历

     

在与用户和用户共享的日历中创建了一个事件   也被邀请参加活动

     

用户是也有此事件的日历的代表

     

订阅的日历已添加到多个帐户

     

在这种情况下,您应该根据其他日历项目进行选择   因素,例如日历或来源。

     

重复事件标识符对于所有事件都是相同的。如果你   希望区分事件,你可能想要使用   开始日期。

     

对于Exchange服务器,iOS和OS X之间的标识符不同   和提醒设备之间的差异。