2013-07-10 37 views
4

我有一個看似直截了當的使用EventKit創建帶有警報事件的教科書案例。令人沮喪的是,它不起作用。下面是我在做什麼:事件警報沒有在EventKit中正確創建,且iOS4.3 /日曆同步到Google日曆

  1. [EKEvent eventWithEventStore:]創建EKEvent並填寫一堆它的屬性
  2. [myEvent addAlarm:[EKAlarm alarmWithRelativeOffset:]]
  3. 保存的事件添加警報與[myEventStore saveEvent:span:error:]

唯一關於整個過程的「不尋常」事情是,我正在使用iOS版本較舊的手機(iPhone 4上的iOS4.3.3),並且我正在使用的所有日曆都會同步到Google日曆。

我有一個日曆(我們稱之爲CalendarA),它在Google日曆中設置爲具有30分鐘的自動鬧鐘來處理新事件,另一個日曆(CalendarB)未設置爲任何自動鬧鐘。

這裏是正常的行爲,我看到:

  • 當我添加一個EKAlarm帶有某種非零relativeOffset(例如5分鐘)CalendarA的,日曆忽略我的偏移並將其設置爲30分鐘
  • 當我做同樣的事情在CalendarB,我報警被完全忽略,而該事件最終有沒有報警

什麼真的很奇怪:如果我設置relativeOffset到零,一切工作完美的特殊情況下! (在CalendarA和CalendarB的情況下,正確添加了零偏移量警報)。順便說一句,如果我根本沒有創建鬧鐘,CalendarA中的事件仍會收到30分鐘的鬧鐘。我想這沒有什麼可以做的。

我也嘗試在創建事件後立即保存事件,然後立即向已保存的實例添加警報並再次保存。這沒有幫助。

如果我手動通過手機上的本地日曆應用創建的報警事件,報警很好的工作,所以我知道它可以任意警報同步到谷歌日曆 - 問題是如何做到這一點通過碼。

如何讓我的事件警報正常工作?

回答

0

哇,我只是解決了它...顯然這與iOS版本,谷歌日曆同步等無關。我只是沒有意識到,我需要通過一個值alarmWithRelativeOffset。這完全不直觀。利用負偏移量,它可以很好地工作。這也解釋了之前爲什麼零點偏移正在工作。

(我想也許它可能與Google日曆有點關係......我猜其他日曆可能會在事件發生後支持鬧鐘,這樣可以讓我更容易地調試問題,但它在Google日曆中不受支持,因此將忽略無效的「將來的鬧鐘」)。

還有一個小問題,那就是在CalendarA中基本上沒有辦法在沒有鬧鐘的情況下創建一個事件,但我的猜測是這裏什麼都不能做 - 即使是本機日曆應用程序也有這個問題。

1

這爲我工作在iOS 4.2,看它是否有助於你太

EKEventStore* eventStore = [[EKEventStore alloc] init]; 
EKEvent* event = [EKEvent eventWithEventStore:eventStore]; 
// set startDate, endDate, title, location, etc. 

[event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -5.0f]]; // 5 min 

[event setCalendar:[eventStore defaultCalendarForNewEvents]]; 
NSError* error = nil; 
BOOL success = [eventStore saveEvent:event span:EKSpanThisEvent error:&error];