我有一个应用程序,我想安排一些活动。所以我想为我的应用创建一个新日历,如果它尚不存在,并且在添加新事件时确实引用了该日历。
答案 0 :(得分:27)
这是使用EventKit
框架在iOS 5上完成的方式:
首先,您需要一个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 *)#>];