如何在多个iOS设备上使用EventKit同步事件

5
假设我必须编写一个应用程序,且该应用程序必须与设备上可用的某个日历同步。我们假设我有“Action”对象,它们具有开始日期、结束日期、重复等属性。
设备A:我创建“Action”对象,然后使用EventKit将它们与名为“Foo”的iCloud日历进行同步。我会得到一些唯一标识符,我需要将它们与我的“Action”对象相关联,以便在未来知道要更新/删除哪个对象。然后,我将我的“Action”对象与自己的服务器进行同步。
设备B:我从服务器获取“Action”对象。我修改它们。我必须更新日历项目。如果在设备B上没有设置“Foo”日历,会发生什么?如果设置了呢?
我想我需要使用calendarItemExternalIdentifier而不是calendarItemIdentifier属性,以便在使用相同日历的多个设备之间唯一地标识事件,对吗?
这个calendarItemExternalIdentifier是在创建calendarItem时给出的吗?或者是由iCloud服务器给出的?这需要互联网连接才能工作吗? calendarIdentifier属性的文档说明如下:

与日历进行完全同步将丢失此标识符。您应该通过缓存其其他属性来处理无法获取标识符的日历。

什么是完全同步?
1个回答

2
“calendarItemExternalIdentifier”是在保存(使用提交)日历项后立即可用。但是,在将日历项进一步同步到服务器时(例如,如果它是来自Exchange帐户的事件),有时会更改“calendarItemExternalIdentifier”。所有其他标识符都不在设备之间共享(包括源和日历的标识符),因此最好的选择是坚持使用“calendarItemExternalIdentifier”。当用户设置新源时(例如,用户删除并添加相同的Exchange帐户),可以进行与日历的完全同步。可能还有不同的情况会导致完整的日历同步。“calendarIdentifier”是本地标识符,因此在您的情况下不太有用(除非您想为“calendarItemExternalIdentifier”更改的问题创建解决方法)。
如前所述,日历和源标识符不是全局的,因此几乎不可能知道“Foo”日历是否设置在另一个设备上,或者“Foo”日历是否与您的其他设备上的“Foo”日历相同。
通常,如果您在新设备上找到了Action对象,则可以假定它所属的日历与来自不同设备的日历相同。

更新Action对象时,一种方法是将更改(像往常一样)保存到服务器。然后,每个设备(包括进行更改的设备)将搜索相应的日历项目,并在找到时进行更新。
我目前正在做类似的事情,这可能是我最终要做的。

更好的选择(可能也更耗时)是让服务器连接并与外部源(CalDav、Exchange等)同步。


请问您能帮我回答这个问题吗:http://stackoverflow.com/questions/33931231/how-to-identify-ekevent-uniquely-with-sync-across-the-devices - Mrug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接