检索EKCalendar的帐户信息

时间:2011-05-16 04:30:34

标签: iphone ios calendar eventkit

我在我的应用中使用EventKit,想知道日历属于哪个帐户。

iPhone日历应用程序显示按帐户分组的所有日历,帐户名称为“myname@me.com”或“Gmail myname”。我在哪里可以获得这些帐户名称?

我可以从EKCalendar获取EKEventStore的列表,我可以获取每个日历标题,但我不知道从哪里获取帐户名称。这有官方API吗?我还能如何检索这些信息? App Store上的某些应用程序会显示帐户名称,因此必须有一种方法(也会在审批过程中滑过......)

谢谢, 托马斯

更新 在其他地方,我发现了对私有财产的引用。在我自己开始寻找之前,有人知道该物业的名称是什么吗?

在其他地方,人们还建议解析description(包括帐户),但这不是一种非常安全或优雅的方式,所以我想避免这样做。

更新2: 我确实发现有一个私人财产(和它的名字),它似乎工作正常。

2 个答案:

答案 0 :(得分:2)

我查看了Apple的文档,并且似乎无法通过公共API提供帐户名称。如果您使用私有财产,您的应用程序将立即被拒绝,因此我认为App Store上的其他应用程序使用desciption解析方法。

我建议您向Apple发布错误报告,并请求他们通过公共API提供帐户名称。直到他们这样做(如果他们这样做),我认为你唯一的选择就是解析你的应用程序在App Store上的描述

答案 1 :(得分:0)

从iOS 5.0开始,您可以从EKCalendar访问EKSource。 你可以得到这个名字&该来源的类型。

    EKEventStore * eventStore = [[EKEventStore alloc] init];
    NSArray * calendars = [eventStore calendarsForEntityType:EKEntityTypeEvent];
    NSArray * typeNames = [[NSArray alloc] initWithObjects:@"TypeLocal",@"TypeExchange",@"TypeCalDAV",@"TypeMobileMe",@"TypeSubscribed",@"TypeBirthdays", nil];
    for (EKCalendar * calendar in calendars) {
        NSString * calendarTitle = calendar.title;
        EKSource * source = calendar.source;
        NSString * accountName = source.title;
        EKSourceType type = source.sourceType;
        NSLog(@"%@ : %@ (%@)", calendarTitle, accountName, typeNames[type]);
    }

生成的日志如下所示:

  • CalHotmail:Exchange(TypeExchange)
  • BirthHotmail(只读):Exchange(TypeExchange)
  • MyCoolAccountCal:Yahoo!(TypeCalDAV)
  • Calendrier:默认(TypeLocal)生日:其他(TypeBirthdays)
  • Calendrier:john.doe@mycooldomain.fr(TypeExchange)
  • ArnoTest:Gmail(TypeCalDAV)
  • 联系人的生日和事件:Gmail(TypeCalDAV)