у календаря нет исходной ошибки при создании нового календаря с помощью EventKit в ios 6

Я разрабатываю приложение календаря, используя структуру eventkit в ios 6. Я пытаюсь получить разрешение, используя метод [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}

ОБНОВЛЕНИЕ: я решил проблему, используя эту ссылку попробуйте


person Suhit Patil    schedule 30.07.2013    source источник
comment
Пожалуйста, закройте как дубликат stackoverflow.com/questions/12454324/   -  person jrc    schedule 14.10.2015


Ответы (1)


Проблема заключается в том, что локальный календарь скрыт, когда iCloud включен, поэтому вам нужно обрабатывать оба случая (iCloud включен и нет).

См. этот ответ для рабочего решения: https://stackoverflow.com/a/15980556/72176

person William Denniss    schedule 14.04.2014
comment
спасибо за ответ .. да, я сначала проверил, включен ли iCloud, а затем я установил источник на iCloud, а если нет, то я установил его на локальный. - person Suhit Patil; 14.04.2014
comment
Привет, Уильям. Я внес изменения, как вы предложили, но иногда я не могу добавить событие, потому что локальный источник равен нулю. stackoverflow.com/questions/41364480/ Буду очень признателен за помощь. - person Astha Gupta; 03.01.2017