EKEventStoreを使って、Calendarを全部取得する方法です。
(iOS 5で試しています。)
注意:
今のところ(2012/10)、シミュレータにはiCalが入っていないので、
カレンダー機能は、実機で試した方がわかりやすいと思います。
Calendarには、TypeとTitleというのがあって、
その組み合わせで複数のカレンダーが登録できます。
Typeはこんな感じで定義されていて、
typedef enum {
EKCalendarTypeLocal,
EKCalendarTypeCalDAV,
EKCalendarTypeExchange,
EKCalendarTypeSubscription,
EKCalendarTypeBirthday,
} EKCalendarType;
Titleは自分で付けることが可能です。
試しに、自分の端末に登録してあるものを見てみましょう。
※私の場合、iCal に「自宅」、「職場」というのを作っています。
このカレンダーをログに表示するサンプルを作ってみます。
EventKitを使うので、ソースの頭に
#import <EventKit/EventKit.h>
を追加して、Build Phasesの Link Binaryにも追加しておきましょう。
ViewControllerに書いてみました。
– (void)viewDidLoad
{
[super viewDidLoad];
EKEventStore *eventStore = [[EKEventStore alloc] init];
for (int i = 0; i < [eventStore.calendars count]; i++) {
// カレンダー取得
EKCalendar *calender = [eventStore.calendars objectAtIndex:i];
/* 参考: カレンダー Type
typedef enum {
EKCalendarTypeLocal,
EKCalendarTypeCalDAV,
EKCalendarTypeExchange,
EKCalendarTypeSubscription,
EKCalendarTypeBirthday,
} EKCalendarType;
*/
// カレンダー情報のログ出力
NSLog(@”\n Title:%@ \n Type:%d \n Color:%@ \n allows modifications:%d”
, calender.title
, calender.type
, [UIColor colorWithCGColor:calender.CGColor]
, [calender allowsContentModifications]);
}
}
実行すると、こんな感じでカレンダーが取得できます。
2012-10-15 09:13:25.935
Title:Birthdays
Type:4
Color:UIDeviceRGBColorSpace 0.509804 0.584314 0.686275 1
allows modifications:0
2012-10-15 09:13:25.953
Title:Calendar
Type:0
Color:UIDeviceRGBColorSpace 0.054902 0.380392 0.72549 1
allows modifications:1
2012-10-15 09:13:25.958
Title:職場
Type:1
Color:UIDeviceRGBColorSpace 0.964706 0.309804 0 1
allows modifications:1
2012-10-15 09:13:25.961
Title:自宅
Type:1
Color:UIDeviceRGBColorSpace 0.443137 0.101961 0.462745 1
allows modifications:1