0

我想知道是否可以通过应用程序为您的 iphone 创建一个新日历。我知道您可以使用应用程序设置事件,但我可以通过该应用程序制作另一个日历来放置所有事件。

编辑:

如果不可能,最好的解决方法是制作日历和事件存储,并使用 nscoding 保存该信息?然后再取回?

如果有可能创建一个新日历以与现有日历集成,这就是我想要做的。

4

3 回答 3

3

这就是我这样做的方式:

-(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> 这很强大,因此您需要小心并进行大量验证,例如日历是否已经存在等等。希望这可以帮助。

于 2012-06-06T19:53:03.497 回答
0

查看 EventKit的文档,似乎无法以编程方式创建新日历。但是,您可以获得现有日历的列表并找出默认日历。

希望这可以帮助。

于 2012-06-06T18:57:15.797 回答
0

你不能再使用标准的 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;}
于 2013-07-26T10:59:30.763 回答