4

我有一个看似简单的教科书案例,使用 EventKit 创建带有警报的事件。令人沮丧的是,它不起作用。这就是我正在做的事情:

  1. 创建EKEvent一个[EKEvent eventWithEventStore:]并填写它的一堆属性
  2. 添加警报[myEvent addAlarm:[EKAlarm alarmWithRelativeOffset:]]
  3. 保存事件[myEventStore saveEvent:span:error:]

整个过程唯一“不寻常”的事情是我使用的是旧版 iOS 手机(iPhone 4 上的 iOS4.3.3),并且我使用的所有日历都同步到 Google 日历。

我有一个日历(我们称之为 CalendarA),它在 Google 日历中设置为有一个针对新事件的自动 30 分钟警报,还有另一个日历 (CalendarB),它没有为任何自动警报设置。

这是我看到的破碎行为:

  • 当我添加一个EKAlarm某种非零 relativeOffset(例如 5 分钟)时,日历会忽略我的偏移量并将其设置为 30 分钟
  • 当我在 CalendarB 中做同样的事情时,我的警报被完全忽略,事件最终没有警报

真正奇怪的是:是:如果我将 relativeOffset 设置为零,那么对于这种特殊情况,一切都很好!(在 CalendarA 和 CalendarB 情况下都正确添加了零偏移警报)。顺便说一句,如果我根本不创建闹钟,CalendarA 中的事件仍然会收到 30 分钟的闹钟。我想对此无能为力。

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

如果我通过手机上的本机日历应用程序手动创建带有警报的事件,警报工作得很好,所以我知道可以将任意警报同步到 Google 日历 - 问题是如何通过代码来做到这一点。

如何使我的事件警报正常运行?

4

2 回答 2

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]; 
于 2013-07-19T10:20:25.687 回答
0

哇,我刚刚解决了......显然这与iOS版本、谷歌日历同步等无关。我只是没有意识到我需要将一个负值传递给alarmWithRelativeOffset。这完全不直观。使用负偏移量,它可以完美运行。这也解释了为什么之前零偏移有效。

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

仍然存在一个小问题,即在 CalendarA 中基本上无法在没有警报的情况下创建事件,但我的猜测是这里什么都做不了——即使是本机日历应用程序也有这个问题。

于 2013-07-13T14:38:15.697 回答