デフォルトの 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 は小文字表示になる。
システムがカレンダーを作成する時はテキストからカラー文字列とカラーの値を設定して、コードでカラーを設定する時はカラーからカラー文字列を生成している。中ではそんな実装になっているような気がする。