19.2. Retrieving Calendar Groups on an iOS Device

Problem

The user has different calendar accounts, such as an iCloud account and a separate CalDAV account, and a calendar named Calendar under both of these accounts. You want to create an event under the calendar appropriately titled “Calendar” that belongs to the user’s iCloud account, and not the other accounts that she may have on her iOS device.

Solution

Find the event sources that are present in the user’s event store by going through the sources array property in an instance of EKEventStore. This array will contain objects of type EKSource, each of which represents a group of calendars in the event store on the user’s device.

Discussion

Let’s not make anything complicated here. To make a long story short, users can have different accounts (iCloud, Exchange, etc.). Each of these accounts, if they support calendars, is treated as an event source. An event source will then contain calendars.

To find a specific calendar with a given title, you first have to find that calendar in the correct event source. For instance, the following code snippet attempts to find the event source titled iCloud on the user’s device:

- (void) findIcloudEventSource{

    EKSource *icloudEventSource = nil;

    EKEventStore *eventStore = [[EKEventStore alloc] init];
    for (EKSource *source in eventStore.sources){

        if (source.sourceType == EKSourceTypeCalDAV &&
            [source.title caseInsensitiveCompare:@"iCloud"]){
            icloudEventSource = source;
            break;
        }
    }

    if (icloudEventSource ...

Get iOS 7 Programming Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.