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-Method はもう使用できません。それは非推奨です。ここで EKEventStore Class Reference からの引用:

「iOS 5 以降では、デフォルトの init メソッドを使用してイベント ストア オブジェクトを初期化します。iOS 6 以降では、イベント ストアが requestAccessToEntityType:completion: で初期化された後で、データを返すためにエンティティ タイプへのアクセスを要求する必要があります。

OS X では、デフォルトの init メソッドの代わりに initWithAccessToEntityTypes: を使用します。受け入れ可能なエンティティ タイプは、イベント用の 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 に答える