如何在多个设备上将 iOS 上的事件与 EventKit 同步

How sync events on iOS with EventKit across multiple devices

提问人:Ilea Cristian 提问时间:11/19/2013 更新时间:11/4/2015 访问量:1267

问:

假设我必须编写一个应用程序,该应用程序必须与设备上可用的日历之一同步。假设我有“Action”对象,它们具有开始日期、结束日期、重复周期等。

设备 A:我创建“Action”对象,然后使用 EventKit 将它们与名为“Foo”的 iCloud 日历同步。我得到了一些唯一标识符,我必须将它们与我的“Action”对象链接起来,以便知道将来要更新/删除哪一个。然后,我将我的“Action”对象与我自己的服务器同步。

设备 B:我从服务器获取“Action”对象。我修改它们。我必须更新日历项目。如果我没有在设备 B 上设置“Foo”日历会怎样?如果我确实感染了怎么办?

我想我需要使用 而不是属性,以便在使用相同日历的设备上唯一地识别事件,对吧?calendarItemExternalIdentifiercalendarItemIdentifier

这是在创建 calendarItem 的那一刻给出的吗?还是由iCloud服务器提供的?我需要互联网连接才能正常工作吗?calendarItemExternalIdentifier

该物业的文件指出:calendarIdentifier

与日历完全同步将丢失此标识符。你应该 制定计划来处理标识符不再为 可通过缓存其其他属性来获取。

完全同步甚至意味着什么?

iOS Objective-C 同步 iCalendar 事件套件

评论


答:

2赞 alex-i 11/4/2015 #1

calendarItemExternalIdentifier在保存(使用提交)日历项目后即可使用。但是,在某些情况下,当日历项目进一步同步到服务器时,日历项目会更改(例如,如果它是来自 Exchange 帐户的事件)。calendarItemExternalIdentifier

所有其他标识符不会在设备之间共享(这包括源和日历的标识符),因此最好的选择是坚持使用 .calendarItemExternalIdentifier

当用户设置新源(例如,用户删除并添加相同的 Exchange 帐户)时,可能会与日历完全同步。也可能有不同的情况导致完整的日历同步。
是本地标识符,因此它对您的情况没有多大用处(除非您想为更改问题创建解决方法)。
calendarIdentifiercalendarItemExternalIdentifier

如前所述,日历和源标识符不是全局的,因此几乎不可能知道“Foo”日历是否在其他设备上设置,或者“Foo”日历是否与其他设备的“Foo”日历相同。
通常,如果在新设备上找到 Action 对象,则可以假定它所属的日历与来自不同设备的日历相同。

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

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

评论

0赞 Mrug 11/30/2015
你能帮我解决这个问题吗:stackoverflow.com/questions/33931231/......