O'Reilly logo

iOS 7 Programming Cookbook by Vandad Nahavandipoor

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

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 ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required