1

Mavericks にアップグレードした後、私のコードはカレンダーにイベントを正常に追加しなくなりました。Mavericks 開発者向けリリース ノートから、この問題に関連する特定のドキュメントは見つかりませんでした。

このコードを機能させる方法を知っていますか?

//Send new event to the calendar
NSString          *calEventID;

EKEventStore      *calStore = [[EKEventStore alloc]initWithAccessToEntityTypes:EKEntityTypeEvent];
EKEvent           *calEvent = [EKEvent eventWithEventStore:calStore];


//Calendar Values

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];


calEvent.title     = @"TITLE";
calEvent.startDate = [NSDate date];
calEvent.endDate   = [NSDate date];
calEvent.notes     = @"Here are some notes";


[calEvent setCalendar:[calStore defaultCalendarForNewEvents]];
calEventID = [calEvent eventIdentifier];


 NSError *error = nil;
[calStore saveEvent:calEvent span:EKSpanThisEvent commit:YES error:&error];
[calStore commit:nil];
4

1 に答える 1

5

initWithAccessToEntityTypes:OS X 10.9 では、iOS 6 で導入されたものと同様のセキュリティ機能が導入されたため、OS X 10.9 では廃止されました。メソッドを使用してこれを行います-[EKEventStore requestAccessToEntityType:completion:]

したがって、使用するコードは次のようになります。

EKEventStore *eventStore = [[EKEventStore alloc] init];
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        // Event creation code here.
    });
}];

メイン キューへのディスパッチは、イベント ストア完了コールバックが任意のキューで発生する可能性があるためです。ここでドキュメントを読むことができます。

-[EKEventStore requestAccessToEntityType:completion:]OS X 10.9 で利用できるようになったばかりなので、10.8 をサポートする必要がある場合は、パーミッションを要求する必要があるかどうかを判断するためにバージョン チェックを行う必要があることに注意してください。

于 2013-11-01T16:36:14.630 に答える