问题描述
这在iOS 8中完美运行。
This working perfectly in iOS 8.
但在iOS 9中创建问题。这是代码:
But creating issue in iOS 9.Here is code :
self.eventManager.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted) {
// Create a new calendar.
EKCalendar *calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent
eventStore:self.eventManager.eventStore];
// Set the calendar title.
calendar.title = @"<APP name>";
calendar.CGColor=APP_Blue_COLOR.CGColor;
// Find the proper source type value.
for (int i=0; i<self.eventManager.eventStore.sources.count; i++) {
EKSource *source = (EKSource *)[self.eventManager.eventStore.sources objectAtIndex:i];
EKSourceType currentSourceType = source.sourceType;
if (currentSourceType == EKSourceTypeLocal) {
calendar.source = source;
break;
}
}
// Save and commit the calendar.
NSError *error;
[self.eventManager.eventStore saveCalendar:calendar commit:YES error:&error];
// If no error occurs then turn the editing mode off, store the new calendar identifier and reload the calendars.
if (error == nil) {
// Turn off the edit mode.
// Store the calendar identifier.
[self.eventManager saveCustomCalendarIdentifier:calendar.calendarIdentifier];self.eventManager.selectedCalendarIdentifier=calendar.calendarIdentifier;//chirag
}
else{
// Display the error description to the debugger.
NSLog(@"CREATE_CALENDER %@", [error localizedDescription]);
}
}
else
{
UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"" message:@"Please give permission to access your iPhone calender." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
}
}];
它给了我成功的消息,但没有在iPhone日历中创建我的应用日历。
It give me success message but not creating my app calendar in iPhone calendar.
我虽然因为没有设置事件而没有显示它。所以我也尝试设置新事件。
I though that it does not showing it due to no event set to it.so I also tried to set new event.
但是它给了我以下代码&创建新事件时出错。
But it give me following code & error while creating new event.
// Create a new event object.
EKEvent *event = [EKEvent eventWithEventStore:self.eventManager.eventStore];
// Set the event title.
event.title = title;
// Set its calendar.
event.calendar = [self.eventManager.eventStore calendarWithIdentifier:self.eventManager.selectedCalendarIdentifier];
// Set the start and end dates to the event.
event.startDate = startDate;
event.endDate = endDate;
// Save and commit the event.
NSError *error;
if ([self.eventManager.eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error]) {
// Call the delegate method to notify the caller class (the ViewController class) that the event was saved.
return true;
}
else{
// An error occurred, so log the error description.
NSLog(@"%@", [error localizedDescription]);
return false;
}
它在内部给出以下错误,但它会在NSError对象中返回:
It give following error internally however it return will in NSError object:
Error getting shared calendar invitations for entity types 3 from daemon: Error Domain=EKCADErrorDomain Code=1014 "(null)"
推荐答案
问题是当iCloud日历开启时,它会隐藏本地创建的日历从日历应用程序。要绕过此问题,解决方案是向iCloud源添加新日历:
The problem is that when iCloud calendars switched on, it hides the locally created ones from the calendar app. To bypass this problem the solution is to add a new calendar to iCloud source:
for (EKSource *source in self.eventStore.sources)
{
if (source.sourceType == EKSourceTypeCalDAV &&
[source.title isEqualToString:@"iCloud"]) //This is a patch.
{
localSource = source;
break;
}
}
if (localSource == nil)
{
for (EKSource *source in self.eventStore.sources)
{
if (source.sourceType == EKSourceTypeLocal)
{
localSource = source;
break;
}
}
}
这篇关于Objective C-iCal没有在iOS 9中为它创建自定义日历和新事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!