Hatena::Groupiphone-dev

iOS プログラミングメモ

2013-12-13 (Fri)

EKReminderのメモ 19:19  EKReminderのメモ - iOS プログラミングメモ を含むブックマーク

リマインダーアプリのデータを取ってこれるEKReminderについてのメモ。こんど簡単に使い方とかまとめたいのだけど、とりあえず今日調べたことについて書いておく。

EKReminderにはdueDateComponentsていうプロパティがあって、これとalarmsっていういかにも通知に使いそうなプロパティがあるんだけど、リマインダーアプリの編集画面には「通知」という項目しかないのでどうなってるのか気になった次第。

EKEventStoreでリマインダーデータを登録して、アプリでどんな感じで表示されるのか調べた。調べてる最中。

  1. 期限(dueDateComponents)+アラーム(addAlarm)の両方を指定した場合
  2. アラームのみ指定した場合
  3. 期限のみ指定した場合
  4. 期限で日付のみ指定した場合
  5. 期限+アラームで時間が異なる場合

iOS7とMac(Mavericks)のリマインダーアプリとicloud.comのリマインダー、3種類共にリストには「期限」の日時が表示される。Macの場合は[2]のアラームのみ指定の場合にアラームの日時が表示された。

編集画面では「通知」という名前でアラームに指定した内容が編集できるようになっていて、基本的に「期限」は編集できない。ただし、アラームと期限の時刻が異なる場合は両方編集できる。期限のみ指定されてる場合は、編集画面で通知を登録すると期限がどっかに消える。

Macとicloud.comのリマインダーの場合は、アラームのみ指定の場合に期限が編集できる。

なんだかまとまりがないけどこんな感じ。

Calendar and Reminders Programming Guide にはリマインダーのことについてさらっとしか書いてなくてどう使えばいいのかまでは書いてない。

もしかすると「最初はdueDateComponentsとアラームに同じ時間を登録する」→「期限がやってきて通知された」→「オプションで"×分後に再通知"を選択」という操作をするとdueDateComponentsとアラームが違う値になりそう。試してみたら実際にそのようになった。ので、リマインダーを編集する際は基本dueDateComponentsとアラームと同じにする、というのがリマインダーアプリと同じような動きにする秘訣かも。

そうそう、問題はdueDateComponentsに日付のみを指定した場合だ。リマインダーアプリから編集する場合は時間が必須でどうにもならんのだけど、EventKit直接触る場合はそうでもない。実際にドキュメントのdueDateComponentsの所に「時間指定をしなかった場合はall-dayのリマインダーになる」と書いてある。ただこのall-dayになったリマインダーをリマインダーアプリでいじるとall-dayな情報が消えちゃったかも。この辺はまだ検証していない。ちなみに時刻指定をしない場合は-(BOOL)allDayを呼ぶとYESが返ってきます。undocumentedですががが。

ゲスト



トラックバック - http://iphone-dev.g.hatena.ne.jp/ktakayama/20131213