デフォルトの EKCalendar について
デフォルトの EKSource
iOS にはデフォルトで2つのデフォルトのソース EKSource が用意されている。
1つはローカルのカレンダー(iCloud同期を設定しない場合)。
もう1つは EventKit からはアクセスできない誕生日用のカレンダー。
このあたりの詳しい話は以下に書いてある。
デフォルトの EKCalendar
カレンダーは EKEventStore の calendarsForEntityType: もしくは EKSource の calendarsForEntityType: メソッドで取得できる。
前者は返り値の型が NSSet で後者は NSArray になっているので若干注意が必要。
iPhone が初期状態だとリマインダー用のカレンダーは存在していない。
一度リマインダーアプリを起動するか、以下のように defaultCalendarForNewReminders メソッドで新規リマインダー作成用のカレンダーを取得するとリマインダー用のカレンダーが作成される。
システム作成のカレンダーと自前のカレンダーの違い
システムによって作成されているイベントのカレンダーと、システムによって作成されるリマインダーのカレンダーは少し特殊で
/*! @property title @abstract The title of the calendar. */ @property(nonatomic, copy) NSString *title;
title プロパティは言語によってローカライズされた値を持っている。
* ただし Birthday はローカライズされておらず Calendar と Reminders のみ。
| 英語 | 日本語 |
|---|---|
| Calendar | カレンダー |
| Reminders | リマインダー |
| Birthday | Birthday |
この title をコードから設定して上書きした時や自分で EKCalendar を作成する時はこのようなローカライズは行えず設定した値がどの言語でも表示される。
トリビア
システムが作成したカレンダーの description は
EKCalendar <0x175271b0> {title = Birthdays; type = Birthday; allowsModify = NO; color = #8295AF;}
自前で作ったカレンダーの description は
EKCalendar <0x17569c60> {title = test; type = Local; allowsModify = YES; color = #ff0000;}
color のところが大文字か小文字かの違いが出る。
システム作成のカレンダーにコードで色を設定するとシステム作成のカレンダーも color は小文字表示になる。
システムがカレンダーを作成する時はテキストからカラー文字列とカラーの値を設定して、コードでカラーを設定する時はカラーからカラー文字列を生成している。中ではそんな実装になっているような気がする。