Ответ 1
Вы на симуляторе iOS 6 или на устройстве с iOS 6? Если это так, вам нужно попросить у пользователя разрешения на использование хранилища событий, прежде чем вы сможете сохранить его.
В принципе, если в объекте хранилища событий доступен requestAccessToEntityType: complete: selector, вы вызываете этот метод и предоставляете блок кода, который выполняется, когда пользователь предоставляет разрешение, а затем вы делаете сохранение своего события в этом блоке.
Сначала добавьте инфраструктуру EventKit в свой проект и не забудьте включить импорт:
#import <EventKit/EventKit.h>
Вот фрагмент кода, который я использовал, который работал у меня:
EKEventStore *eventStore = [[EKEventStore alloc] init];
if ([eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)])
{
// the selector is available, so we must be on iOS 6 or newer
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (error)
{
// display error message here
}
else if (!granted)
{
// display access denied error message here
}
else
{
// access granted
// ***** do the important stuff here *****
}
});
}];
}
else
{
// this code runs in iOS 4 or iOS 5
// ***** do the important stuff here *****
}
[eventStore release];
Вот сообщение в блоге, которое я сделал по этому вопросу:
http://www.dosomethinghere.com/2012/10/08/ios-6-calendar-and-address-book-issues/