我已经想出如何在我的iPhone应用程序中添加自定义日历,但我无法弄清楚如何将该日历添加到设备的日历中。从应用程序内部查看时,该事件显示正确的日历,但即使我点击事件的日历行,我的日历也不在列表中,如果我想保持日历名称正确,我必须取消。有没有办法'订阅'我本地创建的日历,以便我可以在设备上的日历应用程序中看到它(显然,我也希望它与用户的计算机同步等)。
答案 0 :(得分:6)
它与iCloud有关。启用iCloud时,将隐藏具有本地源(EKSourceTypeLocal)的日历。
答案 1 :(得分:1)
我今天一直在努力解决这个问题,这一切似乎都取决于我(最终用户)在设备上的日历设置。
我个人将我的GMail日历以Exchange格式同步 - 这样做可以防止“本地”日历出现。
通过操纵依赖于用户设置的EKSource,应该正确显示您的日历 - 这适用于我的Exchange场景,请参阅EKSource类参考了解更多场景。考虑检查iCloud!
EKCalendar *calendar = [EKCalendar calendarWithEventStore:self.eventStore];
calendar.title = @"My Calendar";
EKSource *localSource = nil;
EKSource *defaultSource = [self.eventStore defaultCalendarForNewEvents].source;
if (defaultSource.sourceType == EKSourceTypeExchange) {
localSource = defaultSource;
} else {
for (EKSource *source in self.eventStore.sources) {
if (source.sourceType == EKSourceTypeLocal) {
localSource = source;
break;
}
}
}
if (localSource) {
calendar.source = localSource;
} else {
NSLog(@"Error: no local sources available");
}
NSError *error = nil;
BOOL result = [self.eventStore saveCalendar:calendar commit:YES error:&error];
if (result) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:calendar.calendarIdentifier forKey:@"Calendar"];
[userDefaults synchronize];
NSLog(@"Saved calendar to event store");
} else {
NSLog(@"Error saving Calendar");
}