如何在iOS设备上创建新的EKCalendar?

我有一个应用程序,我想安排一些事件。 所以我想为我的应用创建一个新的日历,如果它尚不存在,并且在添加新事件时确实引用了它。

这就是使用EventKit框架在iOS 5上完成的EventKit

首先,您需要一个EKEventStore对象来访问所有内容:

 EKEventStore *store = [[EKEventStore alloc] init]; 

现在,如果希望将日历存储在本地,则需要查找本地日历源。 还有交换账户,CALDAV,MobileMe等来源:

 // find local source EKSource *localSource = nil; for (EKSource *source in store.sources) if (source.sourceType == EKSourceTypeLocal) { localSource = source; break; } 

现在,您可以在此处获取以前创建的日历。 创建日历(见下文)时,会有一个ID。 创建日历后必须存储此标识符,以便您的应用可以再次识别日历。 在这个例子中,我只是将标识符存储在一个常量中:

 NSString *identifier = @"E187D61E-D5B1-4A92-ADE0-6FC2B3AF424F"; 

现在,如果您还没有标识符,则需要创建日历:

 EKCalendar *cal; if (identifier == nil) { cal = [EKCalendar calendarWithEventStore:store]; cal.title = @"Demo calendar"; cal.source = localSource; [store saveCalendar:cal commit:YES error:nil]; NSLog(@"cal id = %@", cal.calendarIdentifier); } 

您还可以配置日历颜色等属性。重要的是存储标识符以供以后使用。 另一方面,如果您已经拥有标识符,则只需获取日历:

 else { cal = [store calendarWithIdentifier:identifier]; } 

我也输入了一些调试输出:

 NSLog(@"%@", cal); 

现在,无论哪种方式都有一个EKCalendar对象供进一步使用。

编辑:从iOS 6起calendarWithEventStore折旧,使用:

 cal = [EKCalendar calendarForEntityType:<#(EKEntityType)#> eventStore:<#(EKEventStore *)#>];