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];

返回空值。我试过 [eventStore calendarWithIdentifier:event.calendarItemIdentifier]; 和其他一些代码但结果相同如何解决这个任何想法

4

4 回答 4

8

如果这是在 iOS 6.0 或更高版本上,您必须首先请求访问用户的日历,然后 EventKit 将使用方法-[EKEventStore requestAccessToEntityType:completion:]将它们交给您

查看日历和提醒编程指南中给出的示例

于 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 回答
0

添加这些行

if(eventStore.defaultCalendarForNewEvents==nil)
*eventStore = [[EKEventStore alloc] init];

第二行将仅在您授予访问权限时第一次执行

您的代码应如下所示

    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;
   if(eventStore.defaultCalendarForNewEvents==nil)
      *eventStore = [[EKEventStore alloc] init];
    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];

这对我有用

于 2015-04-23T20:00:30.810 回答