2013-07-30 27 views
5

Pracuję nad aplikacją kalendarza przy użyciu zestawu eventkit w ios 6. Próbuję uzyskać pozwolenie za pomocą metody [self.store respondsToSelector:@selector(requestAccessToEntityType:completion:)] i po otrzymaniu pozwolenia aby uzyskać dostęp do kalendarzy, próbuję utworzyć nowy kalendarz z identyfikatorem, używając źródła EKSourceTypeLocal i dodawać zdarzenia do nowo utworzonego kalendarza. Mam tu do czynienia z problemem, który polega na tym, że gdy próbuję uruchomić aplikację na iPhone'ach 4s, pojawia się komunikat "Kalendarz nie ma źródła" i nie zapisuje mojego kalendarza, a zatem żadne wydarzenia nie zostaną dodane do kalendarza. Nie wiem, co tutaj robię źle. Proszę, poprowadź mnie, aby rozwiązać ten problem.Błąd "Kalendarz nie ma źródła" podczas tworzenia nowego kalendarza przy użyciu EventKit w ios 6

jestem delegowania mój kod poniżej

- (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} 

UPDATE: I rozwiązać problem za pomocą tego linku try it

+2

Proszę zamknąć jako duplikat http://stackoverflow.com/questions/12454324/defaultcalendarfornewevents-failed – jrc

Odpowiedz

2

Problem wydaje się, że miejscowy kalendarz jest ukryty, gdy iCloud jest włączona, więc trzeba obsługuje oba przypadki (iCloud włączony, a nie).

Zobacz tę odpowiedź za pomocą roztworu roboczego: https://stackoverflow.com/a/15980556/72176

+0

dzięki za answer..yes ja najpierw sprawdzić, czy jest iCloud włączone, a następnie ustawiam źródło na iCloud, a jeśli nie, ustawię go na lokalny. – suhit

+0

Witaj, Williamie - wprowadziłem zmiany zgodnie z sugestiami, ale czasami nie mogę dodać wydarzenia, ponieważ lokalne źródło jest zerowe. http://stackoverflow.com/questions/41364480/unable-to-add-event-in-calendar Naprawdę doceniam pomoc. –