我想在我的应用中插入事件,因此可以在iPhone Calendar.app中查看它们。但由于我不想将用户事件与我的应用程序中的用户事件混合,我想创建一个类似“MyApp Events”的EKCalendar
这可能吗?你会如何过滤你的活动呢?
谢谢!
答案 0 :(得分:12)
绝对可以创建自己的日历 - 问题是您需要iOS 5:
EKEventStore* eventStore = [[EKEventStore alloc] init];
NSString* calendarName = @"My Cal";
EKCalendar* calendar;
// Get the calendar source
EKSource* localSource;
for (EKSource* source in eventStore.sources) {
if (source.sourceType == EKSourceTypeLocal)
{
localSource = source;
break;
}
}
if (!localSource)
return;
calendar = [EKCalendar calendarWithEventStore:eventStore];
calendar.source = localSource;
calendar.title = calendarName;
NSError* error;
bool success= [eventStore saveCalendar:calendar commit:YES error:&error];
if (error != nil)
{
NSLog(error.description);
// TODO: error handling here
}
答案 1 :(得分:2)
您(或其他任何人)是否在添加新日历方面取得了进展?
我遇到了同样的情况。我可以通过编程方式将事件很好地添加到默认日历中,但我想将它们添加到新日历中,这样它们就不会干扰用户存在的事件,并且可以被用户轻松删除/隐藏而不是删除所有事件都是手动的。
您无法设置新EKCalendar对象的属性。看起来你只能将一个像defaultCalendarForNewEvents这样的现有的东西分配给一个EKCalendar对象。
但是,我知道可以以编程方式创建一个新日历,因为我已经看到iPhone应用程序正在执行此操作(不离开应用程序)。
答案 2 :(得分:0)
这是您可以查看具有特定标题的日历是否已存在的方法。 如果它不存在,那么您可以以编程方式创建它。
声明布尔类型变量
BOOL doesExist=NO;
EKEventStore *eventStore=[[EKEventStore alloc] init];
NSArray *calanders=[eventStore calendarsForEntityType:EKEntityTypeEvent];
//Now Iterate through every calendar in the array and match its title
// with the title that you want to create
for(EKCalendar calendar in calendars)
{
if([[calendar title] isEqualToString:@"youdesiredname"])
{
doesExist=YES;
}
}
//所以现在检查我们的bool变量是否包含值YES它意味着已经存在具有相同名称/标题的日历。如果没有则可以创建
if(!doesExist)
{
NSString* calendarName = @"DesiredCalendarName";
EKCalendar* calendar;
EKSource* localSource;
for (EKSource* source in eventStore.sources) {
if (source.sourceType == EKSourceTypeLocal)
{
localSource = source;
break;
}
if (!localSource)
return;
calendar = [EKCalendar calendarWithEventStore:eventStore];
calendar.source = localSource;
calendar.title = calendarName;
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
calendar = [eventStore calendarWithIdentifier:self.calendarIdentifier];
event.calendar = calendar;
// Set the start date to the current date/time and the event duration to one hour
NSDate *startDate = [NSDate date];
event.startDate = startDate;
event.endDate = [startDate dateByAddingTimeInterval:3600];
//And to save the event to the event database:
NSError *error = nil;
BOOL result = [eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error];
if (result)
{
NSLog(@"Saved event to event store.")
}
else
{
NSLog(@"Error saving event: %@.", saveError);
}
NSError* error;
bool success= [eventStore saveCalendar:calendar commit:YES error:&error];
if (error != nil)
{
NSLog(error.description);
}
}