使用ios 6中的EventKit创建新日历时,"日历没有源"错误

Suh*_*til 5 iphone calendar ios eventkit ios6

我正在使用ios 6中的eventkit框架开发日历应用程序.我正在尝试使用该[self.store respondsToSelector:@selector(requestAccessToEntityType:completion:)]方法获取权限,并且在获得访问日历的权限后,我尝试使用EKSourceTypeLocal源创建带有标识符的新日历并将事件添加到新创建的日历.我在这里面临的问题是,当我尝试在iPhone 4s中运行应用程序时,它会显示"日历没有来源"的错误,并且它不会保存我的日历,因此没有任何事件被添加到日历中.我不知道我在这里做错了什么.请指导我解决这个问题.

我在下面发布我的代码

   - (void)viewDidLoad
{
    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    NSLog(@"in view did load method");


    // For iOS 6.0 and later
    self.store = [[EKEventStore alloc] init];
    if([self.store respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {

    [self.store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
        // handle access here
        dispatch_async(dispatch_get_main_queue(), ^{

            if (granted) {

                NSLog(@"permission granted");

                EKCalendar *myCalendar;

                EKSource *myLocalSource = nil;
                for (EKSource *calendarSource in self.store.sources) {
                    if (calendarSource.sourceType == EKSourceTypeLocal) {
                        myLocalSource = calendarSource;
                        break;
                    }
                }

                if (!myLocalSource)
                    return;

                NSString *mycalIndentifier = [[NSUserDefaults standardUserDefaults] valueForKey:@"my_calendar_identifier"];

                if (mycalIndentifier == NULL) {

                    // Create a new calendar of type Local... save and commit
                    myCalendar  = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:self.store];
                    myCalendar.title = @"New_Calendar";
                    myCalendar.source = myLocalSource;


                    NSString *calendarIdentifier = myCalendar.calendarIdentifier;

                    NSError *error = nil;
                    [_store saveCalendar:myCalendar commit:YES error:&error];

                    if (!error) {
                        NSLog(@"created, saved, and commited my calendar with id %@", myCalendar.calendarIdentifier);

                        [[NSUserDefaults standardUserDefaults] setObject:calendarIdentifier forKey:@"my_calendar_identifier"];

                    } else {
                        NSLog(@"an error occured when creating the calendar = %@", error.description);
                        error = nil;
                    }

                    //create an event

                    // Create a new event... save and commit
                    EKEvent *myEvent = [EKEvent eventWithEventStore:_store];
                    myEvent.allDay = NO;
                    myEvent.startDate = [NSDate date];
                    myEvent.endDate = [NSDate date];
                    myEvent.title = @"Birthday";
                    myEvent.calendar = myCalendar;
                    [_store saveEvent:myEvent span:EKSpanThisEvent commit:YES error:&error];

                    if (!error) {
                        NSLog(@"the event saved and committed correctly with identifier %@", myEvent.eventIdentifier);
                    } else {
                        NSLog(@"there was an error saving and committing the event");
                        error = nil;
                    }

                    EKEvent *savedEvent = [_store eventWithIdentifier:myEvent.eventIdentifier];
                    NSLog(@"saved event description: %@",savedEvent);

                }
                else{

                    myCalendar = [_store calendarWithIdentifier:mycalIndentifier];
                }

            }
            else if(!granted){

                NSLog(@"Permission not granted");

            }
            else{

                NSLog(@"error = %@", error.localizedDescription);
            }

        });

    }];
  }


}


this is the error I am getting :

Predicate call to calendar daemon failed: Error Domain=EKCADErrorDomain Code=1013 "The operation couldn’t be completed. (EKCADErrorDomain error 1013.)"

not saved = Error Domain=EKErrorDomain Code=14 "Calendar has no source" UserInfo=0x1d5f6950 {NSLocalizedDescription=Calendar has no source}
Run Code Online (Sandbox Code Playgroud)

更新:我使用此链接尝试了解决问题

Wil*_*iss 3

问题似乎是启用 iCloud 时本地日历被隐藏,因此您需要处理这两种情况(启用 iCloud 和未启用 iCloud)。

请参阅此答案以获得可行的解决方案:https ://stackoverflow.com/a/15980556/72176