以编程方式将事件添加到ios 5中的日历

时间:2011-11-15 18:34:56

标签: xcode calendar ios5

eventStore=[[EKEventStore alloc] init];
EKEvent *addEvent=[EKEvent eventWithEventStore:eventStore];
addEvent.title=@"hello";
addEvent.startDate=messageDate;
addEvent.endDate=[addEvent.startDate dateByAddingTimeInterval:600];
[addEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
addEvent.alarms=[NSArray arrayWithObject:[EKAlarm alarmWithAbsoluteDate:addEvent.startDate]];
[eventStore saveEvent:addEvent span:EKSpanThisEvent error:nil];

上面的代码在ios 4.2中工作正常但在ios 5中没有。我在applicationDidfinishingLaunching方法中有代码。由于错误,会出现黑屏并退出应用程序。 ios 5中只有recurrenceRules发生了变化,我没有使用它。所有其他属性在超类EKCalendarItem中可用。我不能测试它,因为我有xcode 3.2和雪豹。我希望调试发生错误的行导致应用程序退出。我怀疑它与setCalendar或使用alarms属性有关。

4 个答案:

答案 0 :(得分:3)

代码是正确的,适用于iOS 5.我的错误原因是第一行

eventStore=[[EKEventStore alloc] init];

由于初始化eventstore需要一些时间,因此将其置于应用程序启动方法中会导致超时。我在崩溃报告中发现了这一点:

"Elapsed application CPU time (seconds):30 seconds"

该应用程序应该在10秒内启动。如果没有超时Exception Codes: 0x8badf00d

答案 1 :(得分:1)

您必须使用第5版SDK。您可以在saveEvent函数中找到diff:

[eventStore saveEvent:addEvent span:EKSpanThisEvent commit:YES error:nil]; 

它可以帮助你。

答案 2 :(得分:0)

iOS5中的API发生了变化(我相信),要求您使用addAlarm实例方法添加EKAlarm对象。

在iOS5中为您的活动添加闹钟:

[addEvent addAlarm:[EKAlarm alarmWithAbsoluteDate:addEvent.startDate]]

查看EKCalendarItem Class Reference了解详情。

虽然@property(nonatomic, copy) NSArray *alarms未指定为只读,但它似乎表现得那样。

有关其他iOS5 EKAlarm问题的详细信息,请参阅https://stackoverflow.com/a/7880242/816455

答案 3 :(得分:0)

NaveenaRK我没有任何时间错误,但我通过执行以下操作来解决此问题。

您需要将eventStore保留在内存中以保持对象的生命周期。

eventStore = [[EKEventStore alloc] init]

我在创建对象时初始化了事件存储,并在dealloc中释放它。设置警报和“CADObjectGetInlineStringProperty”错误的问题都是固定的。