6

iPhoneカレンダーにカレンダーエントリを作成したいので、次のコードを試しました

        EKEventStore *eventStore = [[EKEventStore alloc] init];
        EKEvent *event  = [EKEvent eventWithEventStore:eventStore];
        event.title     = self.selectedPost.postTitle;
        event.notes     = self.selectedPost.postContent;
        event.startDate =  self.selectedPost.startDate;
        event.endDate   =  self.selectedPost.endDate;

        EKCalendar *targetCalendar = nil;
        targetCalendar = [eventStore defaultCalendarForNewEvents];
        NSLog(@"%@",targetCalendar);
        [event setCalendar:targetCalendar];
        NSError *err;
        [eventStore saveEvent:event span:EKSpanThisEvent error:&err];
        UIAlertView *alert = nil;
        NSLog(@"err %@",err);
        if (err) {
            alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[err localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        }
        else{
            alert = [[UIAlertView alloc] initWithTitle:@"Success" message:@"Added to calender" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
        }

        [alert show];

しかし、結果は

2013-01-15 22:31:34.682 Project[40863:907] defaultCalendarForNewEvents failed: Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"
2013-01-15 22:31:34.683 Project[40863:907] (null)
2013-01-15 22:31:34.690 Project[40863:907] err Error Domain=EKErrorDomain Code=1 "No calendar has been set." UserInfo=0x1d535ba0 {NSLocalizedDescription=No calendar has been set.}

私はこれが原因であることを知っています

[eventStore defaultCalendarForNewEvents];

null を返します。[eventStore calendarWithIdentifier:event.calendarItemIdentifier]; を試しました。および他のいくつかのコードですが、これを修正する方法は同じです

4

4 に答える 4

8

これが iOS 6.0 以降の場合、EventKit がメソッド-[EKEventStore requestAccessToEntityType:completion:]を使用してカレンダーを渡す前に、まずユーザーのカレンダーへのアクセスをリクエストする必要があります。

Calendar and Reminders Programming Guideにある例を確認してください。

于 2013-01-19T18:38:15.940 に答える
2

時間を無駄にしないために、-[EKEventStore requestAccessToEntityType:completion:]でビット マスクを使用していることを確認してください。

このような

EKEventStore *eventStore = [[EKEventStore alloc] init];
[eventStore requestAccessToEntityType:EKEntityMaskEvent completion:^(BOOL granted, NSError *error) {
    // ...
}];
于 2013-07-09T09:56:01.813 に答える
0

タイトルが私が作成していたものと同じではないことを確認して修正しdanceましDance.Dance

于 2014-08-12T19:43:34.133 に答える