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
case
InsensitiveCompare
:@"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.