gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:54:57 25 4
gpt4 key购买 nike

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

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

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

我想我需要使用 calendarItemExternalIdentifier 而不是 calendarItemIdentifier 属性才能在使用相同日历的设备之间唯一标识事件,对吗?

calendarItemExternalIdentifier 是在创建 calendarItem 时给出的吗?或者它是由 iCloud 服务器提供的?我需要互联网连接才能工作吗?

calendarIdentifier 属性的文档指出:

A full sync with the calendar will lose this identifier. You should have a plan for dealing with a calendar whose identifier is no longer fetch-able by caching its other properties.

完全同步到底意味着什么?

最佳答案

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

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

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

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

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

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

关于ios - 如何在多个设备上使用 EventKit 同步 iOS 上的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com