事件警报没有在EventKit中正确创建,且iOS4.3 /日历同步到Google日历

问题描述:

我有一个看似直截了当的使用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分钟的闹钟。我想这没有什么可以做的。

我也尝试在创建事件后立即保存事件,然后立即向已保存的实例添加警报并再次保存。这没有帮助。

如果我手动通过手机上的本地日历应用创建的报警事件,报警很好的工作,所以我知道它可以任意警报同步到谷歌日历 - 问题是如何做到这一点通过码。

如何让我的事件警报正常工作?

哇,我只是解决了它...显然这与iOS版本,谷歌日历同步等无关。我只是没有意识到,我需要通过一个值alarmWithRelativeOffset。这完全不直观。利用负偏移量,它可以很好地工作。这也解释了之前为什么零点偏移正在工作。

(我想也许它可能与Google日历有点关系......我猜其他日历可能会在事件发生后支持闹钟,这样可以让我更容易地调试问题,但它在Google日历中不受支持,因此将忽略无效的“将来的闹钟”)。

还有一个小问题,那就是在CalendarA中基本上没有办法在没有闹钟的情况下创建一个事件,但我的猜测是这里什么都不能做 - 即使是本机日历应用程序也有这个问题。

这为我工作在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];