Добавление событий в календарь в ios 5 программно - PullRequest
2 голосов
/ 15 ноября 2011
eventStore=[[EKEventStore alloc] init];
EKEvent *addEvent=[EKEvent eventWithEventStore:eventStore];
addEvent.title=@"hello";
addEvent.startDate=messageDate;
addEvent.endDate=[addEvent.startDate dateByAddingTimeInterval:600];
[addEvent setCalendar:[eventStore defaultCalendarForNewEvents]];
addEvent.alarms=[NSArray arrayWithObject:[EKAlarm alarmWithAbsoluteDate:addEvent.startDate]];
[eventStore saveEvent:addEvent span:EKSpanThisEvent error:nil];

Приведенный выше код прекрасно работает в ios 4.2, но не в ios 5. У меня есть код в методе applicationDidfinishingLaunching. Из-за ошибки появляется черный экран и приложение закрывается. Только recurrenceRules изменился в ios 5, и я им не воспользовался. Все остальные свойства доступны в суперклассе EKCalendarItem. Я не могу проверить это, так как у меня есть xcode 3.2 и снежный барс. Я ищу для отладки строки, в которой возникает ошибка, приводящая к закрытию приложения. Я сомневаюсь, что это связано с setCalendar или использованием свойства alarms.

Ответы [ 4 ]

3 голосов
/ 30 декабря 2011

Код правильный и работает в iOS 5. Причиной моей ошибки была первая строка

eventStore=[[EKEventStore alloc] init];

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

"Elapsed application CPU time (seconds):30 seconds"

Приложение должно быть запущено в течение 10 секунд.если не истекло время ожидания с Exception Codes: 0x8badf00d

1 голос
/ 14 декабря 2011

Вы должны использовать 5-ю версию SDK.Вы можете найти разницу в функции saveEvent:

[eventStore saveEvent:addEvent span:EKSpanThisEvent commit:YES error:nil]; 

Это должно помочь вам.

0 голосов
/ 29 мая 2012

NaveenaRK У меня не было ошибок тайм-аута, но я исправил это, выполнив следующие действия.

Вам нужно сохранить EventStore в памяти на время жизни объектов.

eventStore = [[EKEventStore alloc] init]

Я инициализировал хранилище событий при создании объекта и выпустил его в dealloc.Проблема с установкой аварийных сигналов и ошибка «CADObjectGetInlineStringProperty» были исправлены.

0 голосов
/ 29 декабря 2011

Произошло изменение (я полагаю) в API в iOS5, которое требует, чтобы вы добавляли объекты EKAlarm, используя метод экземпляра addAlarm.

Чтобы добавить тревогу к вашему событию в iOS5:

[addEvent addAlarm:[EKAlarm alarmWithAbsoluteDate:addEvent.startDate]]

Проверьте Ссылка на класс EKCalendarItem для получения подробной информации.

Хотя @property(nonatomic, copy) NSArray *alarms не указан как только для чтения , похоже, он ведет себя таким образом.

См. https://stackoverflow.com/a/7880242/816455 для получения дополнительной информации о других проблемах iOS5 EKAlarm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...