繁体   English   中英

在iOS设备上访问以编程方式创建的日历

[英]Accessing programmatically created calendar on iOS device

我已经弄清楚了如何在我的iPhone应用程序中添加自定义日历,但是我不知道如何将该日历添加到设备的日历中。 从应用程序内部查看时,该事件显示正确的日历,但是即使我点击某个事件的日历行,我的日历也不在列表中,如果要保持日历名称正确,则必须取消。 有没有一种方法可以“订阅”我本地创建的日历,以便可以从设备上的“日历”应用程序中看到它(显然,我还希望它与用户的计算机同步,等等)。

它与iCloud有关。 启用iCloud时,将隐藏具有本地(EKSourceTypeLocal)来源的日历。

今天,我一直在为此苦苦挣扎,而这一切似乎都取决于我(以及最终用户)在设备上的日历设置。

我个人以Exchange格式向下同步我的GMail日历-这样可以防止显示“本地”日历。

通过依赖于用户设置来操作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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM