这个
\n
在freebusy中,数据是iCalendar规范的一部分;根据
RFC 2445
,换行后加空格是拆分长线的正确方法,因此在扫描忙/闲数据时可能会看到很多这样的情况。
正如内森建议的那样,
NSScanner
如果您所期望的数据是合理一致的,那么您可能只需要这些数据。不过,伊卡伦达有很多变幻莫测的地方,所以我经常发现自己在使用
libical
解析ICS信息。使用libical快速而肮脏地解析此数据的示例:
NSString *caldata = @"BEGIN:VCALENDAR\nVERS....etc";
icalcomponent *root = icalparser_parse_string([caldata cStringUsingEncoding:NSUTF8StringEncoding]);
if (root) {
icalcomponent *c = icalcomponent_get_first_component(root, ICAL_VFREEBUSY_COMPONENT);
while (c) {
icalproperty *p = icalcomponent_get_first_property(c, ICAL_FREEBUSY_PROPERTY);
while (p) {
icalvalue *v = icalproperty_get_value(p);
NSLog(@"FREEBUSY Value: %@", [NSString stringWithCString:icalvalue_as_ical_string(v)]);
icalparameter *m = icalproperty_get_first_parameter(p, ICAL_FBTYPE_PARAMETER);
while (m) {
NSLog(@"Parameter: %@", [NSString stringWithCString:icalparameter_as_ical_string(m)]);
m = icalproperty_get_next_parameter(p, ICAL_FBTYPE_PARAMETER);
}
p = icalcomponent_get_next_property(c, ICAL_FREEBUSY_PROPERTY);
}
c = icalcomponent_get_next_component(root, ICAL_VFREEBUSY_COMPONENT);
}
icalcomponent_free(root);
}
libical的文档在项目下载本身中(请参见
UsingLibical.txt
)还有一个关于运输的可爱教程
libical in your application bundle
.