阅读Apple的文档,我仍然对EKCalenderItem's calendarItemExternalIdentifier和EKEvent's eventIdentifier之间的差异感到困惑,我们应该使用哪一个来识别不同的日历事件设备。具体做法是:
EKCalendarItem calendarItemExternalIdentifier 日历项目的外部标识符由日历服务器提供。 (只读)
和
EKEvent eventIdentifier:该事件的唯一标识符。 (只读)
在iOS6中添加了EKCalendarItem calendarItemExternalIdentifier,我认为这将是我需要保存的标识符,以便稍后在EKEventStore eventWithIdenfier:
中调用,因为它声称:
此标识符允许您跨越访问相同的事件或提醒 多个设备。
但是在我自己的测试中,似乎当我创建并保存新的EKEvent时,我从EKEvent对象获取的eventIdenifier是唯一且有用的,而我得到的calendarItemExternalIdentifier似乎不适用于{{1} }
如果有人有确凿的答案,我很想知道。
答案 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之间的标识符不同 和提醒设备之间的差异。