gpt4 book ai didi

objective-c - 使用 Objective-C 解析 VCALENDAR (ics)

转载 作者:行者123 更新时间:2023-12-04 21:58:32 24 4
gpt4 key购买 nike

我正在寻找一种使用 objective-c 解析 VCALENDAR 数据的简单方法。具体来说,我只关心 FREEBUSY 数据(见下文):

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REPLY
PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
BEGIN:VFREEBUSY
UID:XYZ-DONT-CARE
DTSTART:20090605T070000Z
DTEND:20090606T070000Z
ATTENDEE:/principals/__uids__/ABC1234-53D8-4079-8392-01274F97F5E1/
DTSTAMP:20090605T075430Z
FREEBUSY;FBTYPE=BUSY:20090605T170000Z/20090605T200000Z,20090605T223000Z/20
090606T003000Z
FREEBUSY;FBTYPE=BUSY-UNAVAILABLE:20090605T070000Z/20090605T150000Z,2009060
6T010000Z/20090606T070000Z
ORGANIZER:/principals/__uids__/ABC1234-53D8-4079-8392-01274F97F5E1/
END:VFREEBUSY
END:VCALENDAR

我尝试使用 componentsSeparatedByString:@"\n"来解析它,但是 FREEBUSY 数据的一部分有一个\n,导致它无法正确解析。

我是否遗漏了一些简单的东西?

最佳答案

FREEBUSY数据中间的\n是iCalendar规范的一部分;根据 RFC 2445 ,换行符后跟一个空格是拆分长行的正确方法,因此您可能会在扫描 FREEBUSY 数据时看到很多这种情况。

正如 Nathan 所建议的,如果您期望的数据相当一致,那么 NSScanner 可能就是您所需要的全部。不过,iCalendar 中有很多变数,所以我经常发现自己使用 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);
// This gives: 20090605T170000Z/20090605T200000Z
// (note that stringWithCString is deprecated)
NSLog(@"FREEBUSY Value: %@", [NSString stringWithCString:icalvalue_as_ical_string(v)]);
icalparameter *m = icalproperty_get_first_parameter(p, ICAL_FBTYPE_PARAMETER);

while (m) {
// This gives: FBTYPE=BUSY
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 .

关于objective-c - 使用 Objective-C 解析 VCALENDAR (ics),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com