Я хочу добавить события в календарь «someName». В случае, если календарь с заданным именем не существует, я создам его программно. Моя проблема в том, что событие не добавляется, когда localSource (типа EKSource) оказывается нулевым. Я добавил 3 проверки, чтобы убедиться, что я получаю значение localSource, но даже в некоторых случаях localSource равен нулю. Так что на мои телефонные события добавляются, но на телефоне моего друга они этого не делают.Невозможно добавить событие в календарь
Я последовал за различные должности, и я понял, что EKSource может быть из 6 типов: https://developer.apple.com/reference/eventkit/eksourcetype
То, что я не понимаю, в каких случаях localSource будет ноль? Что это означает на обычном языке? Могу ли я что-то сделать из кода, чтобы сделать его не ноль или что-то должно быть сделано пользователем на устройстве?
- (void)setCalendar {
NSArray *calendars = [self.eventStore calendarsForEntityType:nil];
NSString *calendarTitle = someName;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"title matches %@", calendarTitle];
NSArray *filtered = [calendars filteredArrayUsingPredicate:predicate];
if ([filtered count]) {
self.calendar = [filtered firstObject];
}
else {
self.calendar = [EKCalendar calendarForEntityType:EKEntityTypeEvent eventStore:self.eventStore];
self.calendar.title = calendarTitle;
EKSource *localSource;
for (EKSource *source in self.eventStore.sources)
{
//if iCloud account is setup then add the event in that calendar
if (source.sourceType == EKSourceTypeCalDAV && [source.title isEqualToString:@"iCloud"])
{
localSource = source;
break;
}
}
if (localSource == nil)
{
for (EKSource *source in self.eventStore.sources)
{
//if iCloud is not setup then look for local source
if (source.sourceType == EKSourceTypeLocal)
{
localSource = source;
break;
}
}
}
if (!localSource) {
localSource = [self.eventStore defaultCalendarForNewEvents].source;
}
self.calendar.source = localSource;
NSError *calendarErr = nil;
BOOL calendarSuccess = [self.eventStore saveCalendar:self.calendar commit:YES error:&calendarErr];
if (!calendarSuccess) {
NSLog(@"Error while updating calendar %@", calendarErr);
}
}
}
PS: У меня есть разрешение на добавление событий календаря.
У вас есть разрешение на манипуляции с календарем вашего друга? Разве ваш друг позволяет вашему приложению делать это? – NSDmitry
Да, у меня есть все необходимые разрешения. –
Что такое версия iOS для iPhone вашего и друга? –