的文档EKCalendar
类指出了这一点calendarIdentifier
财产:
与日历完全同步将丢失此标识符。你应该
有一个处理标识符为 no 的日历的计划
通过缓存其其他属性,可以更长时间地获取。
“完全同步”究竟何时发生以及除了calendarIdentifier
?
“完全同步”到底什么时候发生?
日历和提醒编程指南 https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40004759-SW1这样解释这个问题:
如果从应用程序外部发生对日历数据库的更改,
Event Kit 能够通过通知检测更改,以便您的应用程序可以
采取适当的行动。使用事件工具包对日历项目所做的更改是自动同步关联的日历(CalDAV、Exchange 和
很快)。
当您的应用程序打开时,我看到这样的“完全同步”事件场景:
1.用户将您的应用程序发送到后台并打开日历应用程序。他更改日历名称,添加/编辑/删除事件,甚至删除一些日历。
2.用户对 Mac 上的 iCloud 日历应用一些更改。 iOS 设备收到 iCloud 日历已更改的通知,因此必须进行同步。
3.第三方应用程序收到静默通知,iOS 在后台启动它,应用程序根据通知创建一些日历事件。
一般来说,这意味着“完全同步”事件可以随时发生。
如何检测和处理“完全同步”事件?
观察日历数据库的外部更改 https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/EventKitProgGuide/ObservingChanges/ObservingChanges.html#//apple_ref/doc/uid/TP40009765-CH4-SW1这样解释这个问题:
其他进程或应用程序可能会修改日历
您的应用程序运行时的数据库。如果您的应用获取日历
事件或提醒,您应该注册以获得有关更改的通知到日历数据库。通过这样做,您可以确保日历
您向用户显示的提醒信息是最新的。
以下是注册此类通知的代码示例:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(storeChanged:)
name:EKEventStoreChangedNotification
object:eventStore];
我认为重新创建实例是有意义的EKCalendar
类和重新缓存calendarIdentifier
如果需要的话。
除了calendarIdentifier之外,还有哪些属性容易改变?
我找不到关于这个问题的任何文档。但由于日历甚至可能在某些时候不存在(例如用户在日历应用程序中手动删除它),那么日历的任何属性EKCalendar
发生“完全同步”事件后,对象可能无效。
阅读上面的链接以获取更多信息和详细信息也是有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)