我的应用程序如何获取用户iPhone上的日历列表

时间:2011-01-08 19:10:44

标签: iphone list calendar eventkit

我正在编写一个iPhone应用程序,它将使用EventKit框架在用户的日历中创建新事件。那部分工作得很好(除了它处理时区的不稳定方式 - 但这是另一个问题)。我无法弄清楚的是如何获取用户日历的列表,以便他们可以选择将事件添加到哪个日历。我知道它是一个EKCalendar对象,但文档没有显示任何方式来获取整个集合。

提前致谢,

标记

3 个答案:

答案 0 :(得分:21)

通过文档搜索会发现EKEventStore类具有calendars属性。

我的猜测是你会做类似的事情:

EKEventStore * eventStore = [[EKEventStore alloc] init];
NSArray * calendars = [eventStore calendars];

编辑:从iOS 6开始,您需要指定是否要检索提醒日历或日历日历:

EKEventStore * eventStore = [[EKEventStore alloc] init];
EKEntityType type = // EKEntityTypeReminder or EKEntityTypeEvent
NSArray * calendars = [eventStore calendarsForEntityType:type];    

答案 1 :(得分:7)

我用来获取日历名称和类型的可用NSDictionary的代码是这样的:

//*** Returns a dictionary containing device's calendars by type (only writable calendars)
- (NSDictionary *)listCalendars {

    EKEventStore *eventDB = [[EKEventStore alloc] init];
    NSArray * calendars = [eventDB calendars];
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    NSString * typeString = @"";

    for (EKCalendar *thisCalendar in calendars) {
        EKCalendarType type = thisCalendar.type;
        if (type == EKCalendarTypeLocal) {
            typeString = @"local";
        }
        if (type == EKCalendarTypeCalDAV) {
            typeString = @"calDAV";
        }
        if (type == EKCalendarTypeExchange) {
            typeString = @"exchange";
        }
        if (type == EKCalendarTypeSubscription) {
            typeString = @"subscription";
        }
        if (type == EKCalendarTypeBirthday) {
            typeString = @"birthday";
        }
        if (thisCalendar.allowsContentModifications) {
            NSLog(@"The title is:%@", thisCalendar.title);
            [dict setObject: typeString forKey: thisCalendar.title]; 
        }
    }   
    return dict;
}

答案 2 :(得分:2)

我得到了日历列表OK - 问题是我没有得到用户可显示的列表。对于所有这些,calendar.title属性为null;我也没有看到任何类型的id属性。

- >更新:它现在适用于我。我犯的错误是将eventStore对象放在一个临时变量中,然后获取日历列表,然后释放eventStore。好吧,如果你这样做,你的所有日历也会消失。在某些iOS框架中,Containment不是严格面向对象的,这就是一个例子。也就是说,日历对象依赖于事件存储,它不是它自己的独立实体。

无论如何 - 上面的解决方案很好!