2013-07-30 11 views
5

Ich entwickle eine Kalender-App mit Eventkit Rahmen in IOS 6. Ich versuche, die Erlaubnis mit der [self.store respondsToSelector:@selector(requestAccessToEntityType:completion:)]-Methode und nach Erlangung der Erlaubnis zu erhalten Um auf die Kalender zuzugreifen, versuche ich, den neuen Kalender mit der Kennung EKSourceTypeLocal Quelle zu erstellen und Ereignisse zu dem neu erstellten Kalender hinzuzufügen. Ich stehe hier vor dem Problem, dass, wenn ich versuche, die App in iPhone 4s zu starten, der Fehler angezeigt wird, dass "Kalender keine Quelle hat" und es meinen Kalender nicht speichert und daher keine Ereignisse zu dem Kalender hinzugefügt werden. Ich weiß nicht, was ich hier falsch mache. Bitte leiten Sie mich, um dieses Problem zu lösen."Kalender hat keine Quelle" Fehler beim Erstellen eines neuen Kalenders mit EventKit in IOS 6

ich meinen Code bin Entsendung unter

- (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: Ich löste das Problem mit diesem Link try it

+2

Bitte schließen als Duplikat http://stackoverflow.com/questions/12454324/defaultcalendarfornewevents-failed – jrc

Antwort

2

Problem, dass die lokalen Kalender zu sein scheint verborgen ist, wenn iCloud aktiviert ist, so müssen Sie handle beide Fälle (iCloud aktiviert und nicht).

Sehen Sie diese Antwort für eine Arbeitslösung: https://stackoverflow.com/a/15980556/72176

+0

Dank für die answer..yes i zuerst überprüft, ob iCloud ist aktiviert und dann stelle ich die Quelle auf iCloud und wenn nicht, dann stelle ich es auf lokal. – suhit

+0

Hallo William - Ich habe Änderungen vorgenommen, wie du vorgeschlagen hast, aber manchmal kann ich kein Ereignis hinzufügen, weil die lokale Quelle Null ist. http://stackoverflow.com/questions/41364480/unable-to-add-event-in-calendar Ich werde wirklich etwas Hilfe zu schätzen wissen. –