我正在尝试创建一个存储重复活动的基于云的服务。我选择使用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
规则的各个组成部分。
答案 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实例之间进行转换。