我想知道是否可以通过应用程序为您的 iphone 创建一个新日历。我知道您可以使用应用程序设置事件,但我可以通过该应用程序制作另一个日历来放置所有事件。
编辑:
如果不可能,最好的解决方法是制作日历和事件存储,并使用 nscoding 保存该信息?然后再取回?
如果有可能创建一个新日历以与现有日历集成,这就是我想要做的。
我想知道是否可以通过应用程序为您的 iphone 创建一个新日历。我知道您可以使用应用程序设置事件,但我可以通过该应用程序制作另一个日历来放置所有事件。
编辑:
如果不可能,最好的解决方法是制作日历和事件存储,并使用 nscoding 保存该信息?然后再取回?
如果有可能创建一个新日历以与现有日历集成,这就是我想要做的。
这就是我这样做的方式:
-(NSString*)createCal:(NSString*)myCalId;{
// Instantiate eventstore object
EKEventStore *store = [[EKEventStore alloc] init];
EKSource *localSource = nil;
for (EKSource *source in store.sources)
if (source.sourceType == EKSourceTypeLocal){
localSource = source;
break;
}
//this is you creating your calendar
EKCalendar *cal;
cal = [EKCalendar calendarWithEventStore:store];
cal.title = @"Name of calendar";
cal.source = localSource;
[store saveCalendar:cal commit:YES error:nil];
NSLog(@"cal id = %@", cal.calendarIdentifier);
return cal.calendarIdentifier;}
您将需要导入<EventKit/EventKit.h>
这很强大,因此您需要小心并进行大量验证,例如日历是否已经存在等等。希望这可以帮助。
查看 EventKit的文档,似乎无法以编程方式创建新日历。但是,您可以获得现有日历的列表并找出默认日历。
希望这可以帮助。
你不能再使用标准的 init 方法了;它已被弃用。这里引用来自 EKEventStore 类参考:
“在 iOS 5 及更高版本上,使用默认的 init 方法初始化事件存储对象。在 iOS 6 及更高版本上,您必须在使用 requestAccessToEntityType:completion: 初始化事件存储后请求访问实体类型才能返回数据。
在 OS X 上,使用 initWithAccessToEntityTypes: 而不是默认的 init 方法。可接受的实体类型是事件的 EKEntityMaskEvent 和提醒的 EKEntityMaskReminder。”
因此,如果您使用 iOS6,则类似于:
EKEventStore *store = [[EKEventStore alloc] initWithAccessToEntityTypes:completion:];
和
cal = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:store];
我的 MacOSX 应用程序需要它。所以我必须使用这个:
所以在我的案例(MacOSX)中就是这个解决方案。这是 Sparqs 代码;只需使用新的 init 而不是标准的 init 进行修改:
-(NSString*)createCal:(NSString*)myCalId;{ // Instantiate eventstore object EKEventStore *store = [[EKEventStore alloc] initWithAccessToEntityTypes:EKEntityMaskEvent]; EKSource *localSource = nil; for (EKSource *source in store.sources) if (source.sourceType == EKSourceTypeLocal){ localSource = source; break; } //this is you creating your calendar EKCalendar *cal; cal = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:store]; cal.title = @"Name of calendar"; cal.source = localSource; [store saveCalendar:cal commit:YES error:nil]; NSLog(@"cal id = %@", cal.calendarIdentifier); return cal.calendarIdentifier;}