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
Proszę zamknąć jako duplikat http://stackoverflow.com/questions/12454324/defaultcalendarfornewevents-failed – jrc