前回の記事で、デフォルトでは2つの EKSource
が存在する事について書いた。
iCloud のアカウントを設定するとさらに EKSourceTypeCalDAV
EKSourceTypeSubscribed
の2つのソースが追加される。
一覧は以下
title | sourceType | EKSourceTypeの値 | 備考 |
---|---|---|---|
Default | EKSourceTypeLocal | 0 | |
Other | EKSourceTypeOther | 5 | Private |
iCloud | EKSourceTypeCalDAV | 2 | |
Subscribed Calendars | EKSourceTypeSubscribed | 4 |
iCloud のリマインダーを有効にするとリマインダーのデータが iCloud に統合され Default EKSourceTypeLocal
内のリマインダーのリストはすべて iCloud EKSourceTypeCalDAV
に移動する。
Default EKSourceTypeLocal
の EKSource
はソースの一覧には存在しているが、このソースを指定して新しいリストを作成しようとしてもエラーが起きてリストを作成する事はできない。
Domain=EKErrorDomain Code=24 "That account does not support reminders." UserInfo=0x15ed2580 {NSLocalizedDescription=That account does not support reminders.}
エラーコードを EKError.h で確認すると
EKErrorSourceDoesNotAllowReminders You are trying to add a calendar that allows reminders to a source that does not allow them.
となっている。
iCloud 同期中はローカルのリマインダーには書き込み出来なくなるというのが仕様らしい。
新しいリマインダーのリストを作成する時はソースの一覧から iCloud EKSourceTypeCalDAV
を探して、存在しなければ Default EKSourceTypeLocal
を作成するようにするか、ユーザが設定しているデフォルトのリマインダーリストと同じソースを利用するといった方法が考えられる。
後者の方がスマートかな。