2013-07-10 11 views
4

У меня есть, казалось бы, простой учебник с использованием EventKit для создания событий с будильниками. Неудивительно, что это не сработает. Вот что я делаю:Тревоги событий не созданы правильно в EventKit с iOS4.3/календари, синхронизированные с Календарем Google

  1. Создать EKEvent с [EKEvent eventWithEventStore:] и заполнить кучу своих свойств
  2. Добавить тревогу с [myEvent addAlarm:[EKAlarm alarmWithRelativeOffset:]]
  3. сохранить событие с [myEventStore saveEvent:span:error:]

только «Необычные» вещи по всему процессу - это то, что я использую телефон со старой версией iOS (iOS4.3.3 на iPhone 4) и что все календари, которые я использую, синхронизируются с Календари Google.

У меня есть один календарь (назовем его CalendarA), который настроен в Google Календари, чтобы иметь автоматический 30-минутный сигнал тревоги для новых событий и другой календарь (CalendarB), который не настроен для любых автоматических сигналов.

Вот сломанное поведение я вижу:

  • Когда я добавляю EKAlarm с каким-то ненулевого relativeOffset (например, 5 минут) до CalendarA, календарь игнорирует мое смещение и устанавливает его в 30 минут
  • Когда я делаю то же самое в CalendarB, моя тревога игнорируется полностью, и событие заканчивается не имея тревоги

Что действительно странно: Если установить relativeOffset в ноль, все отлично работает для этого особого случая! (Тревога с нулевым смещением правильно добавлена, как в случаях CalendarA, так и в CalendarB). Кстати, если я вообще не создаю тревогу, события в CalendarA все равно получат 30-минутный сигнал. Я думаю, что ничего не поделаешь.

Я также попытался сохранить событие сразу после создания события, а затем сразу же добавить будильник в уже сохраненный экземпляр и снова сохранить его. Это не помогло.

Если я вручную создавать события с сигнализацией через родное приложение календаря на телефон, сигнализация работает отлично, так что я знаю, что это является можно синхронизировать произвольные сигналы для Google Календарей - вопрос в том, как сделать это с помощью код.

Как я могу правильно настроить свои аварийные сигналы о событиях?

ответ

0

Ничего себе, я просто решил его ... Видимо, это не имеет ничего общего с версиями IOS, Google Календари синхронизации и т.д. Я просто не понял, что мне нужно передать отрицательное значение alarmWithRelativeOffset. Это было совершенно неинтуитивно. С отрицательным смещением он отлично работает. Это также объясняет, почему раньше выполнялось нулевое смещение.

(Возможно, это может быть связано с календарями Google ... Я предполагаю, что другие календари могут поддерживать сигналы тревоги после события, и это позволило бы мне более легко отладить проблему, но он не поддерживается в Google Календари, поэтому недействительный «будильник в будущем» просто игнорируется).

Есть еще незначительная проблема, когда по-существу нет возможности создать событие без тревоги в CalendarA, но я предполагаю, что здесь ничего не может быть сделано - даже в собственном приложении Calendar есть эта проблема.

1

Это работает для меня на прошивке 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];