将EKRecurrenceRules与Cloud Service RFC 2445 iCalendar规范RRULE同步

时间:2012-10-21 13:32:34

标签: ios icalendar eventkit rfc2445 rrule

我正在尝试创建一个存储重复活动的基于云的服务。我选择使用icalendar RRULE标准(RFC2445)执行此操作,并使用下面通过基于云的服务公开的数据库模式。

EventID
EventName
EventDescripton
Start
End
RecurrenceRule  <-- Store RFC 2445 iCalendar specification RRULE (recurrence)
Active
Deleted
DateCreated
DateLastUpdated

我相信EKRecurrenceRules符合RFC 2445,但是通过存储RRULE的字符串表示或EKRecurrenceRule的描述,可以实现更符合跨平台的架构。

我可以轻松地在客户端创建EKRecurrenceRule并从EKRecurrenceRule描述属性中提取RRULE。但是,我的问题是如何从云服务中提取时将该描述属性转换回客户端上的EKRecurrenceRule对象?看起来很愚蠢的Apple会公开一个属性来提取兼容的RRULE,但是没有提供任何方法将RRULE转换为本机对象。

我希望尽可能避免存储EKRecurrence规则的各个组成部分。

2 个答案:

答案 0 :(得分:2)

您可以使用此库: https://github.com/FabienDiTore/ios-rrule_parser

创建一个EKRecurrenceRule。如果你这样做,请告诉我。

答案 1 :(得分:0)

  

...从EKRecurrenceRule描述属性中提取RRULE

这似乎充满了危险。 -[id<NSObject> description]的文档只保证它返回“描述接收者内容的字符串” - EKRecurrenceRule的实现可能在将来不会给出正确的RRULE,或者可能只是改变了“提取”RRULE赢得的不行。 (这可能就是为什么Apple没有提供将RRULE转换回EKRecurrenceRule的原因 - 它们并不意味着你首先能够提取和使用RRULE。)

在我看来,更好的解决方案是找到或编写一个库或EKRecurrenceRule类别,它提供了一个合适的- (NSString *)rrule访问器,也许还有一个相应的- (id)initWithRRule:(NSString *)rrule初始化器。这样,您可以避免依赖未记录的行为,并确信您可以按照您希望的方式在RRULE和EKRecurrenceRule实例之间进行转换。