2016-02-27 62 views
0

我试图用EventKit或第三方库处理CalDAV事件。 我有一个的CalDAV服务器在我的本地网络主办,我加入一个VEVENT的资源属性一些额外的性能参数,它看起来像:在Swift或Objective C中处理CalDAV

BEGIN:VCALENDAR 
VERSION:2.0 
CALSCALE:GREGORIAN 
BEGIN:VEVENT 
CREATED:20160108T144516Z 
UID:9ED5366B-E3BD-4C32-BA67-4B9A1F5D39F7 
DTEND:20160224T093000 
TRANSP:OPAQUE 
RESOURCES;X-ORE-IPP=%14119%;X-ORE-RES=%3%;X-ORE-STATUT=%103%;X-ORE-TYPE= 
%3%: 
SUMMARY:summary test 
DTSTART:20160224T090000 
DTSTAMP:20160224T075721Z 
LAST-MODIFIED:20160224T075721Z 
SEQUENCE:0 
DESCRIPTION:EII 25 27 lioei 
anto) 
END:VEVENT 
END:VCALENDAR 

随着EventKit我们可以操纵事件的一些特性,但又能怎么样我们可以访问自定义属性参数吗?

+0

你能提供更多关于你的iOS实现的信息吗?你是否在某人的日历上设置了事件,然后尝试从这些事件中抽取自定义数据?或试图将事件设置为日历? – bolnad

+0

首先,我想获得所有活动。日历来自JavaScript/HTML日历。正如你所知,苹果认识到CalDav,并且很容易从中实现事件。 我想我们想要从CalDav事件中获取所有数据会变得更加复杂。 CalDav允许我们编写包含在事件中的额外字段。 虽然你是对的,但我试图获得事件并拉取自定义数据 –

回答

1

当前EventKit提供的API非常有限,并且不允许您访问自定义属性或自定义属性参数。 (但是它应该保留自定义参数 - 虽然资源可能有特殊的行为)。

简而言之:您想要的是EventKit无法实现的。您将需要implement CalDAV on your own或使用第三方库 - CalConnect维护list

P.S:

而且你(AB)利用资源的看起来不正确我。首先 - 它似乎没有价值。这可能会混淆客户(他们可能只是放弃它 - 因为,它不指定任何资源

然后RESOURCES是一个很普通的但多值属性,例如,从RFC:

RESOURCES:EASEL,PROJECTOR,VCR 

您的使用似乎表明,自定义属性参数都属于一个单一的资源(状况等)以iCalendar这样的调度通常不具有资源属性,但与ATTENDEE属性和CUTYPERESOURCE,像做:

ATTENDEE;CUTYPE=ROOM;STATUS=ACCEPTED:ore://localhost/rooms/28372 
ATTENDEE;CUTYPE=RESOURCE:STATUS=TENTATIVE:ore://localhost/beamers/8347 

我不知道你的实际'ORE'用例是什么。如果它与CalDAV(我认为应该是可取的)兼容,你可以使用ATTENDEE。如果没有也可能是更好的使用自定义属性,而不是自定义属性参数,像:

X-ORE-RESOURCE;STATUS=ACCEPTED:ore://localhost/rooms/28372 

请注意,您可能要对自定义属性使用标准的性能参数(如状态,而不是X-ORE-状态)。

P.S.2:您的VCALENDAR使用浮动时间。这在技术上是有效的,但很少有客户支持这一点。客户通常对全天事件使用浮动日期,对于时间事件则使用UTC或TZ时间。他们可能会阅读它,但如果他们编辑该事件,则会附加他们的本地时区。并由此使事件不浮动。不确定这对你是否重要,但附加TZID很可能是一个好主意。

P.S.3:你的VCALENDAR缺少PRODID。

+0

谢谢你的回答。我想你是正确的滥用资源。我正在重构一个JS CalDav客户端和一个iOS应用程序,所以很高兴告诉我我做错了什么。 现在我必须编写我自己的iOS CalDav客户端:) –

+0

@Delparo是否完全实现了iOS CalDAV客户端?你能够检索所有事件和地点(会议室)吗?你有没有图书馆来加速这一发展? –

+0

嗨亚瑟,我能够从CalDav服务器检索事件(和元数据)感谢Php框架(https://github.com/wvrzel/simpleCalDAV)。但它没有优化,我遇到了一些错误 –