4

我正在尝试创建一个基于云的服务来存储重复事件。我选择使用 icalendarRRULE标准 (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但不提供任何方法将an转换RRULE为本机对象。

EKRecurrence如果可能,我想避免存储规则的单个组件。

4

2 回答 2

2

你也许可以使用这个库: https ://github.com/FabienDiTore/ios-rrule_parser

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

于 2013-04-15T22:06:56.593 回答
1

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

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

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

于 2013-04-15T22:18:12.563 回答