2016-02-27 58 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)。但它沒有優化,我遇到了一些錯誤 –