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=[[EKEventStorealloc]init];for(EKSource*sourceineventStore.sources){if(source.sourceType==EKSourceTypeCalDAV&&[source.titlecaseInsensitiveCompare:@"iCloud"]){icloudEventSource=source;break;}}if(icloudEventSource ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access