4

EventKit を使用してアラーム付きのイベントを作成する、一見単純で教科書的なケースがあります。イライラすることに、それは機能しません。これが私がやっていることです:

  1. EKEventwithを作成し、[EKEvent eventWithEventStore:]そのプロパティの束を入力します
  2. でアラームを追加[myEvent addAlarm:[EKAlarm alarmWithRelativeOffset:]]
  3. でイベントを保存[myEventStore saveEvent:span:error:]

プロセス全体で唯一「珍しい」ことは、古い iOS バージョン (iPhone 4 では iOS4.3.3) の電話を使用していることと、使用しているすべてのカレンダーが Google カレンダーに同期されていることです。

新しいイベントの自動 30 分のアラームを設定するために Google カレンダーで設定された 1 つのカレンダー (CalendarA と呼びましょう) と、自動アラームが設定されていない別のカレンダー (CalendarB) があります。

私が見ている壊れた動作は次のとおりです。

  • EKAlarmある種のゼロ以外のrelativeOffset(5分など)をCalendarAに追加すると、カレンダーはオフセットを無視して30分に設定します
  • CalendarB で同じことをすると、アラームが完全に無視され、イベントにアラームがなくなります。

本当に奇妙なのは、relativeOffset を 0 に設定すると、すべてがその特殊なケースで完全にうまく機能するということです! (ゼロ オフセット アラームは、CalendarA と CalendarB の両方のケースで正しく追加されます)。ちなみに、アラームをまったく作成しない場合でも、CalendarA のイベントは 30 分のアラームを受け取ります。これに関してはどうしようもないと思います。

また、イベントの作成直後にイベントを保存し、すぐに保存済みのインスタンスにアラームを追加して再度保存しようとしました。これは役に立ちませんでした。

電話のネイティブ カレンダー アプリを使用してアラーム付きのイベントを手動で作成すると、アラームは問題なく機能するので、任意のアラームを Google カレンダーに同期できることがわかります。問題は、コードを使用してそれを行う方法です。

イベント アラームを正しく動作させるにはどうすればよいですか?

4

2 に答える 2

1

これは iOS 4.2 でうまくいきました。

 EKEventStore* eventStore = [[EKEventStore alloc] init];
 EKEvent* event = [EKEvent eventWithEventStore:eventStore];
 // set startDate, endDate, title, location, etc.

[event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -5.0f]]; // 5 min

[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError* error = nil;
BOOL success = [eventStore saveEvent:event span:EKSpanThisEvent error:&error]; 
于 2013-07-19T10:20:25.687 に答える
0

うわー、私はそれを解決しました...どうやらこれは iOS バージョン、Google カレンダーの同期などとは何の関係もありませんでした。alarmWithRelativeOffsetに負の値を渡す必要があることに気づいていませんでした。これは完全に非直感的でした。負のオフセットを使用すると、完全に機能します。これは、ゼロオフセットが以前に機能していた理由も説明しています。

(おそらくGoogleカレンダーと少し関係があると思います...他のカレンダーはイベント後のアラームをサポートしている可能性があるため、問題をより簡単にデバッグできたはずですが、サポートされていませんそのため、無効な「将来のアラーム」は単に無視されます)。

CalendarA でアラームなしでイベントを作成する方法が基本的にないという小さな問題がまだ残っていますが、ここでは何もできないと思います - ネイティブのカレンダー アプリでさえこの問題を抱えています。

于 2013-07-13T14:38:15.697 に答える