我有一个看似直截了当的教科书案例,用EventKit来创建带有警报的事件。令人沮丧的是,它不起作用。我正在做的事情是:
EKEvent
创建一个[EKEvent eventWithEventStore:]
,并填写它的一堆属性[myEvent addAlarm:[EKAlarm alarmWithRelativeOffset:]]
的警报[myEventStore saveEvent:span:error:]
保存事件整个过程中唯一“不寻常”的事情是,我使用的手机带有一个较旧的iOS版本( iPhone 4上的iOS 4.3.3),而且我使用的所有日历都与同步。
我有一个日历(让我们称之为CalendarA),它设置在Google日历中,为新事件设置一个30分钟的自动警报,而另一个日历(CalendarB)没有为任何自动警报设置。
下面是我看到的坏行为:
EKAlarm
(例如5分钟)的relativeOffset添加到CalendarA时,日历会忽略我的偏移量,并将其设置为30分钟。真正奇怪的是什么:,如果我将relativeOffset设置为零,那么对于这种特殊情况,一切都很好!(在CalendarA和CalendarB两种情况下,都正确地添加了零偏移警报)。顺便说一句,如果我根本没有创建一个警报,事件在CalendarA仍然得到一个30分钟的警报。我想这件事是无能为力的。
我还尝试在事件创建后立即保存事件,然后立即向已经保存的实例添加警报并再次保存它。这没什么用。
如果我通过手机上的本地日历应用程序手动创建带有警报的事件,那么警报工作得非常好,所以我知道可以将任意警报同步到Google日历--问题是如何通过代码进行同步。
我怎样才能使我的事件警报行为正确?
发布于 2013-07-13 14:38:15
哇我刚解决了..。显然,这与iOS版本、Google等无关。我只是还没有意识到我需要将一个负值传递给alarmWithRelativeOffset。这完全是不直观的。与负偏移,它是完美的工作。这也解释了为什么零偏移之前是有效的。
(我想这可能与谷歌日历有关.我猜想其他日历可能会在事件发生后支持警报,这样我就可以更容易地调试这个问题,但是Google日历中不支持它,因此无效的“将来的警报”被忽略了)。
还有一个小问题,在CalendarA中根本无法在没有警报的情况下创建一个事件,但我猜这里什么也做不了--即使是本地日历应用程序也有这个问题。
发布于 2013-07-19 10:20:25
这对我在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];
https://stackoverflow.com/questions/17576964
复制相似问题